П'ятниця, 29.03.2024, 08:50
Гость

Мішатронік

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

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


Система метаоб'єктів

Частина розширень реалізована стандартними методами C ++, проте Qt використовує і більш складні синтаксичні розширення, тому він використовує автоматичну генерацію коду.
Для цього в C ++ реалізований механізм шаблонів, але він не надає всіх необхідних Qt можливостей, погано сумісний з динамічної об'єктною моделлю і в повній мірі не підтримується всіма версіями компіляторів.
У складних ситуаціях Qt використовує свій компілятор метаоб'ектів moc, що перетворює код з розширеннями в стандартний код C ++. Для позначення того, що клас використовує метаоб'ектние можливості (і, відповідно, повинен оброблятися moc), в розділі private потрібно вказати макрос Q_OBJECT.
Якщо ви зустрічаєте дивні помилки компіляції, які повідомляють про те, що у класу не визначений конструктор, або у нього немає таблиці віртуальних функцій (vtbl), швидше за все ви забули код, що генерується moc. Зазвичай це відбувається, якщо не вказано макрос Q_OBJECT.
Щоб уникнути помилок Q_OBJECT краще використовувати в усіх класах, успадкованих від QObject (побічно або безпосередньо).
Використання динамічного підходу пов'язано з певними втратами в продуктивності в порівнянні зі статичним, однак цим можна знехтувати, якщо взяти до уваги отримані переваги.
У числі інших, метаоб'ектний код додає метод

virtual const QMetaObject * QObject :: metaObject () const;
який повертає вказівник на метаоб'ект об'єкта.
На системі метаоб'ектів влаштовані сигнали, слоти і властивості.
При спадкуванні від QObject пам'ятайте про обмеження, що накладаються moc:
При множинному успадкуванні нащадком QObject повинен бути перший і тільки перший успадкований клас:

 

class MyClass : public QObject, public Foo, public Bar
{
 // ...
};


Віртуальне успадкування з QObject не підтримується.

 

 

 

Форма входа
Пошук
Друзі сайту
Календар
«  Березень 2024  »
ПнВтСрЧтПтСбНд
    123
45678910
11121314151617
18192021222324
25262728293031

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