Середа, 29.01.2025, 23:34
Гость

Мішатронік

Мобільна версія | Додати у вибране  | Мій профіль | Вихід | RSS |
Меню сайту
Наше опитування
Хто ви?

Всього відповідей: 10
Статистика

Онлайн всього: 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.

 

 

 

Форма входа
Пошук
Друзі сайту
Календар
«  Січень 2025  »
ПнВтСрЧтПтСбНд
  12345
6789101112
13141516171819
20212223242526
2728293031

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