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

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

Transcript of Денис Кормалев Метаобъектная система Qt

Page 1: Денис Кормалев Метаобъектная система Qt

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

Денис  Кормалев    

Великий  Новгород,  2015  

Page 2: Денис Кормалев Метаобъектная система Qt

Все,  что  мы  так  любим  

•  Сигнал-­‐слоты    

Page 3: Денис Кормалев Метаобъектная система Qt

Все,  что  мы  так  любим  

•  Сигнал-­‐слоты  •  Q_PROPERTY  

Page 4: Денис Кормалев Метаобъектная система Qt

Все,  что  мы  так  любим  

•  Сигнал-­‐слоты  •  Q_PROPERTY  •  Связь  C++  и  QML  

Page 5: Денис Кормалев Метаобъектная система Qt

Все,  что  мы  так  любим  

•  Сигнал-­‐слоты  •  Q_PROPERTY  •  Связь  C++  и  QML  •  invokeMethod  

Page 6: Денис Кормалев Метаобъектная система Qt

Все,  что  мы  так  любим  

•  Сигнал-­‐слоты  •  Q_PROPERTY  •  Связь  C++  и  QML  •  invokeMethod  •  QVariant    

Page 7: Денис Кормалев Метаобъектная система Qt

Все,  что  мы  так  любим  

•  Сигнал-­‐слоты  •  Q_PROPERTY  •  Связь  C++  и  QML  •  invokeMethod  •  QVariant  •  Работа  с  БД  

Page 8: Денис Кормалев Метаобъектная система Qt

Все,  что  мы  так  любим  

•  Сигнал-­‐слоты  •  Q_PROPERTY  •  Связь  C++  и  QML  •  invokeMethod  •  QVariant  •  Работа  с  БД  

Мета  система  

Page 9: Денис Кормалев Метаобъектная система Qt

Подключение  

•  Наследник  от  QObject  •  Макрос  Q_OBJECT  

Page 10: Денис Кормалев Метаобъектная система Qt

Q_OBJECT  

Page 11: Денис Кормалев Метаобъектная система Qt

moc  

•  Meta  Object  Compiler  

Page 12: Денис Кормалев Метаобъектная система Qt

moc  

•  Meta  Object  Compiler  •  Генерация  дополнительного  кода  перед  сборкой  проекта  

Page 13: Денис Кормалев Метаобъектная система Qt

moc  

•  Meta  Object  Compiler  •  Генерация  дополнительного  кода  перед  сборкой  проекта  

•  Обрабатываются  все  хедеры,  указанные  в  headers  секции  

Page 14: Денис Кормалев Метаобъектная система Qt

moc  

•  Meta  Object  Compiler  •  Генерация  дополнительного  кода  перед  сборкой  проекта  

•  Обрабатываются  все  хедеры,  указанные  в  headers  секции  

•  Для  каждого  создается  файл  moc_myclass.cpp    

Page 15: Денис Кормалев Метаобъектная система Qt

moc  

•  Meta  Object  Compiler  •  Генерация  дополнительного  кода  перед  сборкой  проекта  

•  Обрабатываются  все  хедеры,  указанные  в  headers  секции  

•  Для  каждого  создается  файл  moc_myclass.cpp  •  Чтобы  корректно  работали  классы  из  .cpp  файлов  –  надо  в  конце  .cpp  файла  подключить  myclass.moc  

Page 16: Денис Кормалев Метаобъектная система Qt
Page 17: Денис Кормалев Метаобъектная система Qt
Page 18: Денис Кормалев Метаобъектная система Qt
Page 19: Денис Кормалев Метаобъектная система Qt
Page 20: Денис Кормалев Метаобъектная система Qt
Page 21: Денис Кормалев Метаобъектная система Qt
Page 22: Денис Кормалев Метаобъектная система Qt
Page 23: Денис Кормалев Метаобъектная система Qt
Page 24: Денис Кормалев Метаобъектная система Qt
Page 25: Денис Кормалев Метаобъектная система Qt
Page 26: Денис Кормалев Метаобъектная система Qt
Page 27: Денис Кормалев Метаобъектная система Qt
Page 28: Денис Кормалев Метаобъектная система Qt
Page 29: Денис Кормалев Метаобъектная система Qt
Page 30: Денис Кормалев Метаобъектная система Qt

QMetaObject  

•  Имя  класса      

Page 31: Денис Кормалев Метаобъектная система Qt

QMetaObject  

•  Имя  класса  •  Методы    

Page 32: Денис Кормалев Метаобъектная система Qt

QMetaObject  

•  Имя  класса  •  Методы  •  Свойства  

Page 33: Денис Кормалев Метаобъектная система Qt

QMetaObject  

•  Имя  класса  •  Методы  •  Свойства  •  Енамы  (в  том  числе  строковые  представления  значений)  

Page 34: Денис Кормалев Метаобъектная система Qt

QMetaObject  

•  Имя  класса  •  Методы  •  Свойства  •  Енамы  (в  том  числе  строковые  представления  значений)  

•  Создание  новых  объектов  

Page 35: Денис Кормалев Метаобъектная система Qt

QMetaObject  

•  Имя  класса  •  Методы  •  Свойства  •  Енамы  (в  том  числе  строковые  представления  значений)  

•  Создание  новых  объектов  •  Вызов  методов  

Page 36: Денис Кормалев Метаобъектная система Qt

QMetaObject  

•  Имя  класса  •  Методы  •  Свойства  •  Енамы  (в  том  числе  строковые  представления  значений)  

•  Создание  новых  объектов  •  Вызов  методов    •  Преобразование  типов  (qobject_cast)  

Page 37: Денис Кормалев Метаобъектная система Qt
Page 38: Денис Кормалев Метаобъектная система Qt

Проблемы  

•  Лишний  шаг  компиляции  

Page 39: Денис Кормалев Метаобъектная система Qt

Проблемы  

•  Лишний  шаг  компиляции  •  Отсутствие  возможности  использования  дефайнов  

Page 40: Денис Кормалев Метаобъектная система Qt

Проблемы  

•  Лишний  шаг  компиляции  •  Отсутствие  возможности  использования  дефайнов  

•  moc  не  поддерживает  шаблонные  классы  

Page 41: Денис Кормалев Метаобъектная система Qt

Проблемы  

•  Лишний  шаг  компиляции  •  Отсутствие  возможности  использования  дефайнов  

•  moc  не  поддерживает  шаблонные  классы  •  signals  и  slots  не  входят  в  стандартные  слова  C++    

Page 42: Денис Кормалев Метаобъектная система Qt

Проблемы  

•  Лишний  шаг  компиляции  •  Отсутствие  возможности  использования  дефайнов  

•  moc  не  поддерживает  шаблонные  классы  •  signals  и  slots  не  входят  в  стандартные  слова  C++    

•  Мелкие  стилистические  проблемы:  –  Полное  название  енамов  –  Обертывание  указателей  на  функции  в  тайпдеф  –  …  

Page 43: Денис Кормалев Метаобъектная система Qt

Отказ  от  moc  

•  Теоретически  возможно  

Page 44: Денис Кормалев Метаобъектная система Qt

Отказ  от  moc  

•  Теоретически  возможно  •  Не  раньше  Qt6  

Page 45: Денис Кормалев Метаобъектная система Qt

Отказ  от  moc  

•  Теоретически  возможно  •  Не  раньше  Qt6  •  Может  повлечь  за  собой  усложнение  синтаксиса  

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

Вопросы?