Денис Кормалев Метаобъектная система Qt
-
Upload
platonov-sergey -
Category
Software
-
view
279 -
download
6
Transcript of Денис Кормалев Метаобъектная система Qt
Метаобъектная система Qt
Денис Кормалев
Великий Новгород, 2015
Все, что мы так любим
• Сигнал-‐слоты
Все, что мы так любим
• Сигнал-‐слоты • Q_PROPERTY
Все, что мы так любим
• Сигнал-‐слоты • Q_PROPERTY • Связь C++ и QML
Все, что мы так любим
• Сигнал-‐слоты • Q_PROPERTY • Связь C++ и QML • invokeMethod
Все, что мы так любим
• Сигнал-‐слоты • Q_PROPERTY • Связь C++ и QML • invokeMethod • QVariant
Все, что мы так любим
• Сигнал-‐слоты • Q_PROPERTY • Связь C++ и QML • invokeMethod • QVariant • Работа с БД
Все, что мы так любим
• Сигнал-‐слоты • Q_PROPERTY • Связь C++ и QML • invokeMethod • QVariant • Работа с БД
Мета система
Подключение
• Наследник от QObject • Макрос Q_OBJECT
Q_OBJECT
moc
• Meta Object Compiler
moc
• Meta Object Compiler • Генерация дополнительного кода перед сборкой проекта
moc
• Meta Object Compiler • Генерация дополнительного кода перед сборкой проекта
• Обрабатываются все хедеры, указанные в headers секции
moc
• Meta Object Compiler • Генерация дополнительного кода перед сборкой проекта
• Обрабатываются все хедеры, указанные в headers секции
• Для каждого создается файл moc_myclass.cpp
moc
• Meta Object Compiler • Генерация дополнительного кода перед сборкой проекта
• Обрабатываются все хедеры, указанные в headers секции
• Для каждого создается файл moc_myclass.cpp • Чтобы корректно работали классы из .cpp файлов – надо в конце .cpp файла подключить myclass.moc
QMetaObject
• Имя класса
QMetaObject
• Имя класса • Методы
QMetaObject
• Имя класса • Методы • Свойства
QMetaObject
• Имя класса • Методы • Свойства • Енамы (в том числе строковые представления значений)
QMetaObject
• Имя класса • Методы • Свойства • Енамы (в том числе строковые представления значений)
• Создание новых объектов
QMetaObject
• Имя класса • Методы • Свойства • Енамы (в том числе строковые представления значений)
• Создание новых объектов • Вызов методов
QMetaObject
• Имя класса • Методы • Свойства • Енамы (в том числе строковые представления значений)
• Создание новых объектов • Вызов методов • Преобразование типов (qobject_cast)
Проблемы
• Лишний шаг компиляции
Проблемы
• Лишний шаг компиляции • Отсутствие возможности использования дефайнов
Проблемы
• Лишний шаг компиляции • Отсутствие возможности использования дефайнов
• moc не поддерживает шаблонные классы
Проблемы
• Лишний шаг компиляции • Отсутствие возможности использования дефайнов
• moc не поддерживает шаблонные классы • signals и slots не входят в стандартные слова C++
Проблемы
• Лишний шаг компиляции • Отсутствие возможности использования дефайнов
• moc не поддерживает шаблонные классы • signals и slots не входят в стандартные слова C++
• Мелкие стилистические проблемы: – Полное название енамов – Обертывание указателей на функции в тайпдеф – …
Отказ от moc
• Теоретически возможно
Отказ от moc
• Теоретически возможно • Не раньше Qt6
Отказ от moc
• Теоретически возможно • Не раньше Qt6 • Может повлечь за собой усложнение синтаксиса
Вопросы?