Метаобъектная система qt

46
Метаобъектная система Qt Денис Кормалев Москва, 2015

Upload: platonov-sergey

Post on 18-Jul-2015

242 views

Category:

Software


3 download

TRANSCRIPT

Метаобъектная  система  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  •  Может  повлечь  за  собой  усложнение  синтаксиса  

Вопросы?