SlideShare a Scribd company logo
1 of 46
Download to read offline
Метаобъектная	
  система	
  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	
  
•  Может	
  повлечь	
  за	
  собой	
  усложнение	
  
синтаксиса	
  
Вопросы?	
  

More Related Content

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

разработка бизнес приложений (8)
разработка бизнес приложений (8)разработка бизнес приложений (8)
разработка бизнес приложений (8)Alexander Gornik
 
Автоматизация разработки курсов: путь от рутины к игре
Автоматизация разработки курсов: путь от рутины к игреАвтоматизация разработки курсов: путь от рутины к игре
Автоматизация разработки курсов: путь от рутины к игреAlexey Simonenko
 
QA Fes 2016. Игорь Любин. Об автоматическом тестировании бэкенда в MediaMarkt
QA Fes 2016. Игорь Любин. Об автоматическом тестировании бэкенда в MediaMarktQA Fes 2016. Игорь Любин. Об автоматическом тестировании бэкенда в MediaMarkt
QA Fes 2016. Игорь Любин. Об автоматическом тестировании бэкенда в MediaMarktQAFest
 
Об автоматическом тестировании бэкенда в Media markt
Об автоматическом тестировании бэкенда в Media marktОб автоматическом тестировании бэкенда в Media markt
Об автоматическом тестировании бэкенда в Media marktIgor Lyubin
 
Mihail Korepanov
Mihail KorepanovMihail Korepanov
Mihail Korepanovyaevents
 
Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автомати...
Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автомати...Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автомати...
Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автомати...Yandex
 
Автоматическое тестирование Web api
Автоматическое тестирование Web apiАвтоматическое тестирование Web api
Автоматическое тестирование Web apiIgor Lyubin
 
Система обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на GroovyСистема обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на GroovyRegn
 
Refactorings with RubyMine
Refactorings with RubyMineRefactorings with RubyMine
Refactorings with RubyMineavokin
 
Архитектура автоматизированных тестов: представление предметной области
Архитектура автоматизированных тестов: представление предметной областиАрхитектура автоматизированных тестов: представление предметной области
Архитектура автоматизированных тестов: представление предметной областиSQALab
 
2016-01-16 02 Екатерина Боброва. Архитектура автоматизированных тестов
2016-01-16 02 Екатерина Боброва. Архитектура автоматизированных тестов2016-01-16 02 Екатерина Боброва. Архитектура автоматизированных тестов
2016-01-16 02 Екатерина Боброва. Архитектура автоматизированных тестовОмские ИТ-субботники
 
Контрактное программирование
Контрактное программированиеКонтрактное программирование
Контрактное программированиеIlya Zelenchuk
 
Прокачиваем WebDriverAgent или как тестировать iOS-приложения после ядерного ...
Прокачиваем WebDriverAgent или как тестировать iOS-приложения после ядерного ...Прокачиваем WebDriverAgent или как тестировать iOS-приложения после ядерного ...
Прокачиваем WebDriverAgent или как тестировать iOS-приложения после ядерного ...Alexey Makhov
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Ontico
 
Aнализ требований, управление тестами в Jira Software
Aнализ требований, управление тестами в Jira SoftwareAнализ требований, управление тестами в Jira Software
Aнализ требований, управление тестами в Jira SoftwareGonchik Tsymzhitov
 
Online learning - Apache Spark alternatives: Vowpal Wabbit. (18.06.2015)
Online learning - Apache Spark alternatives: Vowpal Wabbit. (18.06.2015)Online learning - Apache Spark alternatives: Vowpal Wabbit. (18.06.2015)
Online learning - Apache Spark alternatives: Vowpal Wabbit. (18.06.2015)bddmoscow
 
Postman
PostmanPostman
PostmaniThink
 
Прокачиваем WebDriverAgent, или Как тестировать iOS-приложения после ядерного...
Прокачиваем WebDriverAgent, или Как тестировать iOS-приложения после ядерного...Прокачиваем WebDriverAgent, или Как тестировать iOS-приложения после ядерного...
Прокачиваем WebDriverAgent, или Как тестировать iOS-приложения после ядерного...AvitoTech
 

Similar to Денис Кормалев Метаобъектная система Qt (20)

разработка бизнес приложений (8)
разработка бизнес приложений (8)разработка бизнес приложений (8)
разработка бизнес приложений (8)
 
Автоматизация разработки курсов: путь от рутины к игре
Автоматизация разработки курсов: путь от рутины к игреАвтоматизация разработки курсов: путь от рутины к игре
Автоматизация разработки курсов: путь от рутины к игре
 
QA Fes 2016. Игорь Любин. Об автоматическом тестировании бэкенда в MediaMarkt
QA Fes 2016. Игорь Любин. Об автоматическом тестировании бэкенда в MediaMarktQA Fes 2016. Игорь Любин. Об автоматическом тестировании бэкенда в MediaMarkt
QA Fes 2016. Игорь Любин. Об автоматическом тестировании бэкенда в MediaMarkt
 
Об автоматическом тестировании бэкенда в Media markt
Об автоматическом тестировании бэкенда в Media marktОб автоматическом тестировании бэкенда в Media markt
Об автоматическом тестировании бэкенда в Media markt
 
Mihail Korepanov
Mihail KorepanovMihail Korepanov
Mihail Korepanov
 
Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автомати...
Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автомати...Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автомати...
Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автомати...
 
Автоматическое тестирование Web api
Автоматическое тестирование Web apiАвтоматическое тестирование Web api
Автоматическое тестирование Web api
 
2014-11-01 02 Иван Зезюля. To go или не to go
2014-11-01 02 Иван Зезюля. To go или не to go2014-11-01 02 Иван Зезюля. To go или не to go
2014-11-01 02 Иван Зезюля. To go или не to go
 
Система обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на GroovyСистема обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на Groovy
 
Refactorings with RubyMine
Refactorings with RubyMineRefactorings with RubyMine
Refactorings with RubyMine
 
Архитектура автоматизированных тестов: представление предметной области
Архитектура автоматизированных тестов: представление предметной областиАрхитектура автоматизированных тестов: представление предметной области
Архитектура автоматизированных тестов: представление предметной области
 
2016-01-16 02 Екатерина Боброва. Архитектура автоматизированных тестов
2016-01-16 02 Екатерина Боброва. Архитектура автоматизированных тестов2016-01-16 02 Екатерина Боброва. Архитектура автоматизированных тестов
2016-01-16 02 Екатерина Боброва. Архитектура автоматизированных тестов
 
Контрактное программирование
Контрактное программированиеКонтрактное программирование
Контрактное программирование
 
Прокачиваем WebDriverAgent или как тестировать iOS-приложения после ядерного ...
Прокачиваем WebDriverAgent или как тестировать iOS-приложения после ядерного ...Прокачиваем WebDriverAgent или как тестировать iOS-приложения после ядерного ...
Прокачиваем WebDriverAgent или как тестировать iOS-приложения после ядерного ...
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
 
Aнализ требований, управление тестами в Jira Software
Aнализ требований, управление тестами в Jira SoftwareAнализ требований, управление тестами в Jira Software
Aнализ требований, управление тестами в Jira Software
 
Online learning - Apache Spark alternatives: Vowpal Wabbit. (18.06.2015)
Online learning - Apache Spark alternatives: Vowpal Wabbit. (18.06.2015)Online learning - Apache Spark alternatives: Vowpal Wabbit. (18.06.2015)
Online learning - Apache Spark alternatives: Vowpal Wabbit. (18.06.2015)
 
Ryazan
RyazanRyazan
Ryazan
 
Postman
PostmanPostman
Postman
 
Прокачиваем WebDriverAgent, или Как тестировать iOS-приложения после ядерного...
Прокачиваем WebDriverAgent, или Как тестировать iOS-приложения после ядерного...Прокачиваем WebDriverAgent, или Как тестировать iOS-приложения после ядерного...
Прокачиваем WebDriverAgent, или Как тестировать iOS-приложения после ядерного...
 

More from Platonov Sergey

Евгений Зуев, С++ в России: Стандарт языка и его реализация
Евгений Зуев, С++ в России: Стандарт языка и его реализацияЕвгений Зуев, С++ в России: Стандарт языка и его реализация
Евгений Зуев, С++ в России: Стандарт языка и его реализацияPlatonov Sergey
 
Алексей Кутумов, C++ без исключений, часть 3
Алексей Кутумов,  C++ без исключений, часть 3Алексей Кутумов,  C++ без исключений, часть 3
Алексей Кутумов, C++ без исключений, часть 3Platonov Sergey
 
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...Platonov Sergey
 
Евгений Крутько, Многопоточные вычисления, современный подход.
Евгений Крутько, Многопоточные вычисления, современный подход.Евгений Крутько, Многопоточные вычисления, современный подход.
Евгений Крутько, Многопоточные вычисления, современный подход.Platonov Sergey
 
Тененёв Анатолий, Boost.Asio в алгоритмической торговле
Тененёв Анатолий, Boost.Asio в алгоритмической торговлеТененёв Анатолий, Boost.Asio в алгоритмической торговле
Тененёв Анатолий, Boost.Asio в алгоритмической торговлеPlatonov Sergey
 
Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux
Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на LinuxПавел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux
Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на LinuxPlatonov Sergey
 
Дмитрий Кашицын, Вывод типов в динамических и не очень языках II
Дмитрий Кашицын, Вывод типов в динамических и не очень языках IIДмитрий Кашицын, Вывод типов в динамических и не очень языках II
Дмитрий Кашицын, Вывод типов в динамических и не очень языках IIPlatonov Sergey
 
Дмитрий Кашицын, Вывод типов в динамических и не очень языках I
Дмитрий Кашицын, Вывод типов в динамических и не очень языках IДмитрий Кашицын, Вывод типов в динамических и не очень языках I
Дмитрий Кашицын, Вывод типов в динамических и не очень языках IPlatonov Sergey
 
QML\Qt Quick на практике
QML\Qt Quick на практикеQML\Qt Quick на практике
QML\Qt Quick на практикеPlatonov Sergey
 
Визуализация автомобильных маршрутов
Визуализация автомобильных маршрутовВизуализация автомобильных маршрутов
Визуализация автомобильных маршрутовPlatonov Sergey
 
Функциональный микроскоп: линзы в C++
Функциональный микроскоп: линзы в C++Функциональный микроскоп: линзы в C++
Функциональный микроскоп: линзы в C++Platonov Sergey
 
Как мы уменьшили количество ошибок в Unreal Engine с помощью статического ана...
Как мы уменьшили количество ошибок в Unreal Engine с помощью статического ана...Как мы уменьшили количество ошибок в Unreal Engine с помощью статического ана...
Как мы уменьшили количество ошибок в Unreal Engine с помощью статического ана...Platonov Sergey
 
HPX: C++11 runtime система для параллельных и распределённых вычислений
HPX: C++11 runtime система для параллельных и распределённых вычисленийHPX: C++11 runtime система для параллельных и распределённых вычислений
HPX: C++11 runtime система для параллельных и распределённых вычисленийPlatonov Sergey
 
Ranges calendar-novosibirsk-2015-08
Ranges calendar-novosibirsk-2015-08Ranges calendar-novosibirsk-2015-08
Ranges calendar-novosibirsk-2015-08Platonov Sergey
 
Использование maven для сборки больших модульных c++ проектов на примере Odin...
Использование maven для сборки больших модульных c++ проектов на примере Odin...Использование maven для сборки больших модульных c++ проектов на примере Odin...
Использование maven для сборки больших модульных c++ проектов на примере Odin...Platonov Sergey
 
Дракон в мешке: от LLVM к C++ и проблемам неопределенного поведения
Дракон в мешке: от LLVM к C++ и проблемам неопределенного поведенияДракон в мешке: от LLVM к C++ и проблемам неопределенного поведения
Дракон в мешке: от LLVM к C++ и проблемам неопределенного поведенияPlatonov Sergey
 
One definition rule - что это такое, и как с этим жить
One definition rule - что это такое, и как с этим житьOne definition rule - что это такое, и как с этим жить
One definition rule - что это такое, и как с этим житьPlatonov Sergey
 
DI в C++ тонкости и нюансы
DI в C++ тонкости и нюансыDI в C++ тонкости и нюансы
DI в C++ тонкости и нюансыPlatonov Sergey
 
Аскетичная разработка браузера
Аскетичная разработка браузераАскетичная разработка браузера
Аскетичная разработка браузераPlatonov Sergey
 

More from Platonov Sergey (20)

Евгений Зуев, С++ в России: Стандарт языка и его реализация
Евгений Зуев, С++ в России: Стандарт языка и его реализацияЕвгений Зуев, С++ в России: Стандарт языка и его реализация
Евгений Зуев, С++ в России: Стандарт языка и его реализация
 
Алексей Кутумов, C++ без исключений, часть 3
Алексей Кутумов,  C++ без исключений, часть 3Алексей Кутумов,  C++ без исключений, часть 3
Алексей Кутумов, C++ без исключений, часть 3
 
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
 
Евгений Крутько, Многопоточные вычисления, современный подход.
Евгений Крутько, Многопоточные вычисления, современный подход.Евгений Крутько, Многопоточные вычисления, современный подход.
Евгений Крутько, Многопоточные вычисления, современный подход.
 
Тененёв Анатолий, Boost.Asio в алгоритмической торговле
Тененёв Анатолий, Boost.Asio в алгоритмической торговлеТененёв Анатолий, Boost.Asio в алгоритмической торговле
Тененёв Анатолий, Boost.Asio в алгоритмической торговле
 
Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux
Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на LinuxПавел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux
Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux
 
Дмитрий Кашицын, Вывод типов в динамических и не очень языках II
Дмитрий Кашицын, Вывод типов в динамических и не очень языках IIДмитрий Кашицын, Вывод типов в динамических и не очень языках II
Дмитрий Кашицын, Вывод типов в динамических и не очень языках II
 
Дмитрий Кашицын, Вывод типов в динамических и не очень языках I
Дмитрий Кашицын, Вывод типов в динамических и не очень языках IДмитрий Кашицын, Вывод типов в динамических и не очень языках I
Дмитрий Кашицын, Вывод типов в динамических и не очень языках I
 
QML\Qt Quick на практике
QML\Qt Quick на практикеQML\Qt Quick на практике
QML\Qt Quick на практике
 
Визуализация автомобильных маршрутов
Визуализация автомобильных маршрутовВизуализация автомобильных маршрутов
Визуализация автомобильных маршрутов
 
Функциональный микроскоп: линзы в C++
Функциональный микроскоп: линзы в C++Функциональный микроскоп: линзы в C++
Функциональный микроскоп: линзы в C++
 
C++ exceptions
C++ exceptionsC++ exceptions
C++ exceptions
 
Как мы уменьшили количество ошибок в Unreal Engine с помощью статического ана...
Как мы уменьшили количество ошибок в Unreal Engine с помощью статического ана...Как мы уменьшили количество ошибок в Unreal Engine с помощью статического ана...
Как мы уменьшили количество ошибок в Unreal Engine с помощью статического ана...
 
HPX: C++11 runtime система для параллельных и распределённых вычислений
HPX: C++11 runtime система для параллельных и распределённых вычисленийHPX: C++11 runtime система для параллельных и распределённых вычислений
HPX: C++11 runtime система для параллельных и распределённых вычислений
 
Ranges calendar-novosibirsk-2015-08
Ranges calendar-novosibirsk-2015-08Ranges calendar-novosibirsk-2015-08
Ranges calendar-novosibirsk-2015-08
 
Использование maven для сборки больших модульных c++ проектов на примере Odin...
Использование maven для сборки больших модульных c++ проектов на примере Odin...Использование maven для сборки больших модульных c++ проектов на примере Odin...
Использование maven для сборки больших модульных c++ проектов на примере Odin...
 
Дракон в мешке: от LLVM к C++ и проблемам неопределенного поведения
Дракон в мешке: от LLVM к C++ и проблемам неопределенного поведенияДракон в мешке: от LLVM к C++ и проблемам неопределенного поведения
Дракон в мешке: от LLVM к C++ и проблемам неопределенного поведения
 
One definition rule - что это такое, и как с этим жить
One definition rule - что это такое, и как с этим житьOne definition rule - что это такое, и как с этим жить
One definition rule - что это такое, и как с этим жить
 
DI в C++ тонкости и нюансы
DI в C++ тонкости и нюансыDI в C++ тонкости и нюансы
DI в C++ тонкости и нюансы
 
Аскетичная разработка браузера
Аскетичная разработка браузераАскетичная разработка браузера
Аскетичная разработка браузера
 

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

  • 1. Метаобъектная  система  Qt   Денис  Кормалев     Великий  Новгород,  2015  
  • 2. Все,  что  мы  так  любим   •  Сигнал-­‐слоты    
  • 3. Все,  что  мы  так  любим   •  Сигнал-­‐слоты   •  Q_PROPERTY  
  • 4. Все,  что  мы  так  любим   •  Сигнал-­‐слоты   •  Q_PROPERTY   •  Связь  C++  и  QML  
  • 5. Все,  что  мы  так  любим   •  Сигнал-­‐слоты   •  Q_PROPERTY   •  Связь  C++  и  QML   •  invokeMethod  
  • 6. Все,  что  мы  так  любим   •  Сигнал-­‐слоты   •  Q_PROPERTY   •  Связь  C++  и  QML   •  invokeMethod   •  QVariant    
  • 7. Все,  что  мы  так  любим   •  Сигнал-­‐слоты   •  Q_PROPERTY   •  Связь  C++  и  QML   •  invokeMethod   •  QVariant   •  Работа  с  БД  
  • 8. Все,  что  мы  так  любим   •  Сигнал-­‐слоты   •  Q_PROPERTY   •  Связь  C++  и  QML   •  invokeMethod   •  QVariant   •  Работа  с  БД   Мета  система  
  • 9. Подключение   •  Наследник  от  QObject   •  Макрос  Q_OBJECT  
  • 11. moc   •  Meta  Object  Compiler  
  • 12. moc   •  Meta  Object  Compiler   •  Генерация  дополнительного  кода  перед   сборкой  проекта  
  • 13. moc   •  Meta  Object  Compiler   •  Генерация  дополнительного  кода  перед   сборкой  проекта   •  Обрабатываются  все  хедеры,  указанные  в   headers  секции  
  • 14. moc   •  Meta  Object  Compiler   •  Генерация  дополнительного  кода  перед   сборкой  проекта   •  Обрабатываются  все  хедеры,  указанные  в   headers  секции   •  Для  каждого  создается  файл  moc_myclass.cpp    
  • 15. moc   •  Meta  Object  Compiler   •  Генерация  дополнительного  кода  перед   сборкой  проекта   •  Обрабатываются  все  хедеры,  указанные  в   headers  секции   •  Для  каждого  создается  файл  moc_myclass.cpp   •  Чтобы  корректно  работали  классы  из  .cpp   файлов  –  надо  в  конце  .cpp  файла  подключить   myclass.moc  
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30. QMetaObject   •  Имя  класса      
  • 31. QMetaObject   •  Имя  класса   •  Методы    
  • 32. QMetaObject   •  Имя  класса   •  Методы   •  Свойства  
  • 33. QMetaObject   •  Имя  класса   •  Методы   •  Свойства   •  Енамы  (в  том  числе  строковые   представления  значений)  
  • 34. QMetaObject   •  Имя  класса   •  Методы   •  Свойства   •  Енамы  (в  том  числе  строковые   представления  значений)   •  Создание  новых  объектов  
  • 35. QMetaObject   •  Имя  класса   •  Методы   •  Свойства   •  Енамы  (в  том  числе  строковые   представления  значений)   •  Создание  новых  объектов   •  Вызов  методов  
  • 36. QMetaObject   •  Имя  класса   •  Методы   •  Свойства   •  Енамы  (в  том  числе  строковые   представления  значений)   •  Создание  новых  объектов   •  Вызов  методов     •  Преобразование  типов  (qobject_cast)  
  • 37.
  • 38. Проблемы   •  Лишний  шаг  компиляции  
  • 39. Проблемы   •  Лишний  шаг  компиляции   •  Отсутствие  возможности  использования   дефайнов  
  • 40. Проблемы   •  Лишний  шаг  компиляции   •  Отсутствие  возможности  использования   дефайнов   •  moc  не  поддерживает  шаблонные  классы  
  • 41. Проблемы   •  Лишний  шаг  компиляции   •  Отсутствие  возможности  использования   дефайнов   •  moc  не  поддерживает  шаблонные  классы   •  signals  и  slots  не  входят  в  стандартные   слова  C++    
  • 42. Проблемы   •  Лишний  шаг  компиляции   •  Отсутствие  возможности  использования   дефайнов   •  moc  не  поддерживает  шаблонные  классы   •  signals  и  slots  не  входят  в  стандартные   слова  C++     •  Мелкие  стилистические  проблемы:   –  Полное  название  енамов   –  Обертывание  указателей  на  функции  в  тайпдеф   –  …  
  • 43. Отказ  от  moc   •  Теоретически  возможно  
  • 44. Отказ  от  moc   •  Теоретически  возможно   •  Не  раньше  Qt6  
  • 45. Отказ  от  moc   •  Теоретически  возможно   •  Не  раньше  Qt6   •  Может  повлечь  за  собой  усложнение   синтаксиса