Понеділок, 18.02.2019, 08:48
Гость

Мішатронік

Автор - Кренцін Михайло

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

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

 

 

 

Форма входа
Пошук
Календар
«  Лютий 2019  »
ПнВтСрЧтПтСбНд
    123
45678910
11121314151617
18192021222324
25262728
Друзі сайту
Погода у Вінниці


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