Для динамического приведения QObject используется функция
T qobject_cast (QObject *object);
Она работает как стандартная операция dynamic_cast в C++, но не требует поддержки со стороны системы динамической идентификации типов (RTTI).
Пусть у нас имеется класс MyClass1 , наследующий от QObject и MyClass2 , наследующий от MyClass1 :
#include <QObject> class MyClass1 : public QObject { Q_OBJECT public: MyClass1(); // ... }; class MyClass2 : public MyClass1 { Q_OBJECT public: MyClass2(); // ... };
|
Динамическое приведение иллюстрирует следующий код:
QObject *a = new MyClass2; MyClass1 *b = qobject_cast<MyClass1*>(a); MyClass2 *c = qobject_cast<MyClass2*>(b);
|
Эти операции сработают корректно на стадии выполнения.
Как и в случае с dynamic_cast , результат приведения можно проверить:
if (b = qobject_cast<MyClass1*>(a)) { // ... }
|
Система метаобъектов позволяет также проверить, наследует ли a класс MyClass1 :
if (a->inherits("MyClass1")) { b = static_cast<MyClass1*>(a); // ... }
Источник: http://www.ibm.com/developerworks/ru/library/l-qt_1/ |