Середа, 24.04.2024, 13:17
Гость

Мішатронік

Мобільна версія | Додати у вибране  | Мій профіль | Вихід | RSS |
Меню сайту
Наше опитування
Яка мова вам ближче?
Всього відповідей: 11
Статистика

Онлайн всього: 1
Гостей: 1
Користувачів: 0


Динамічне приведення типів

Для динамічного приведення 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))
{
 // ...
}

Система метаоб'єктів дозволяє також перевірити, чи успадковує класс MyClass1:

if (a->inherits("MyClass1"))
{
 b = static_cast<MyClass1*>(a);
 // ...
}

Однак перевагу має попередній варіант з qobject_cast.

 

 

 

Форма входа
Пошук
Друзі сайту
Календар
«  Квітень 2024  »
ПнВтСрЧтПтСбНд
1234567
891011121314
15161718192021
22232425262728
2930

Єдина Країна! Единая Страна!