Название: Узнать тип виджета[РЕШЕНО] Отправлено: developer от Июль 19, 2009, 14:18 Драсте.
У меня возник маленький вопросик :) :) :). Как узнать тип виджета, который передается функции если аргумент етой функции абстрактный. Пример: // Передаем QStandartItemModel Код: void setModel(QAbstractItemModel* model) Название: Re: Узнать тип виджета Отправлено: Rcus от Июль 19, 2009, 14:22 1. При чем тут виджеты?
2. Изменить определение функции нельзя? 3. RTTI Название: Re: Узнать тип виджета Отправлено: pastor от Июль 19, 2009, 14:30 Qt Meta-Object System
Название: Re: Узнать тип виджета Отправлено: lit-uriy от Июль 19, 2009, 14:48 const char * QMetaObject::className () const // Узнать имя класса
и bool QMetaObject::invokeMethod (...) // Вызвать метод класса Название: Re: Узнать тип виджета Отправлено: ритт от Июль 19, 2009, 15:20 bool QMetaObject::invokeMethod (...) // Вызвать метод класса не метод, а мета-метод. т.е. сигнал / слот / конструктор.3. RTTI -1qobject_cast Название: Re: Узнать тип виджета Отправлено: developer от Июль 19, 2009, 15:22 Цитировать 1. При чем тут виджеты? 2. Изменить определение функции нельзя? 3. RTTI 1. Нда действительно - извиняюсь за неточность. 2. Нельзя 3. А как? :) 2lit-uriy: ето можно, но хотелось бы привести указатель к нужному типу. Вот тут то и заморочка. Узнать имя класса я могу Цитировать const char * QMetaObject::className () const // Узнать имя класса . Но теперь как привесть указатель model к нужному типу если у меня есть только имя нужного типа (const char)Цитировать const char * QMetaObject::className () const // Узнать имя класса кстати об етом я не знал. Спасибо ;) ;)и bool QMetaObject::invokeMethod (...) // Вызвать метод класса Название: Re: Узнать тип виджета Отправлено: Rcus от Июль 19, 2009, 15:39 Хм? RTTI это общее понятие, которое включает в себя не только встроенные механизмы языка для идентификации типов во время исполнения (dynamic_cast, typeid и т.д.), но и механизмы библиотек, например в Qt используется как минимум 5 разных систем: QObject, QVariant, QEvent, QGraphicsItem, QStyleOption. Я не стал указывать на qobject_cast напрямую чтобы автор мог подробнее изучить эту тему, а не браться за средство без изучения основ.
Название: Re: Узнать тип виджета Отправлено: lit-uriy от Июль 19, 2009, 15:48 Можно попробовать по простому, если у тебя ограниченое число наследников:
Код
Название: Re: Узнать тип виджета Отправлено: developer от Июль 19, 2009, 15:56 Наверное так и сделаю. В моем случае действительно немного наследников: 2
Но если их будет много????? ??? ??? ??? ??? Название: Re: Узнать тип виджета Отправлено: developer от Июль 19, 2009, 15:56 Неужели нету способа...
Название: Re: Узнать тип виджета Отправлено: lit-uriy от Июль 19, 2009, 16:02 >>Но если их будет много?
Я думаю, что хорошая организация классов решает эту задачу. Т.е. использование виртуальных методов. В одной функции mySetModel, вызывать разного типа методы плохая идея, код пёстрый получается не стройный. Если же ты собираешся вызывать методы, делающие одну и туже работу, то лучше иметь одного прародителя объектов и внём реализовать виртуальный метод. Тогда множество наследников будут работать в одном ключе. |