Допустим, я хочу в программе активно сообщать QML и Qt и хочу сделать некоторый API, который бы дергал как QML код так и Qt код. Судя по всему есть три варианта.
- Я пишу QML объекты и для доступа из Qt дергаю в коде их свойства по именам.
- Я делаю производные от QObjectов с Q_PROPERTY и загружаю их в QML Engine.
- Я делаю QML объекты и делаю производные QObjectов и пишу отдельный модуль для того, чтобы связать QML объекты с QObjectами и дергаю QObjectы из Qt и QML объекты из QML.
В первом случае мне не нравится тот факт, что я в статический типизированном языке, в большей части программы я буду костыляться с динамической природой QML и всюду будет куча левого кода, а если левого кода не будет, то будет куча ненадежного кода.
Во втором случае мне не нравится то, что в QML коде я не смогу явно увидеть API и без отдельной документации нужно будет лезть в C++ код, чтобы понять какие свойства есть у объекта.
В третьем случае мне не нравится то, что мне придеться дублировать по сути одно и тоже API в QML коде и в C++ коде и придеться править больше кода при смене интерфейса. Это не критично если каждый метод API дергается в 100 разных местах (но критично дергать методы в 100 разных местах), но, обычно, люди стараются так не делать и каждый метод будет вызываться в одном - двух местах. По этому, по факту, это просто в два раза больше работы чем в первом или втором случае.
Кто писал на Qt + QML, как лучше сделать? Или я просто не могу найти бритву?