MyTetra Share
Делитесь знаниями!
Доступ к коду QML из Qt и наоборот
Время создания: 06.01.2018 14:01
Текстовые метки: qt, qml, скрипт
Раздел: Компьютер - Программирование - Язык C++ (Си++) - Библиотека Qt - QML
Запись: xintrea/mytetra_syncro/master/base/1421496477kc3g2ayard/text.html на raw.github.com

Вопрос:

Допустим, я хочу в программе активно сообщать 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 разных местах), но, обычно, люди стараются так не делать и каждый метод будет вызываться в одном - двух местах. По этому, по факту, это просто в два раза больше работы чем в первом или втором случае.


Ответ:

Вариант 2. Для документации есть специальный текстовый формат, через который типы доступны в QML:

http://doc.qt.io/qt-5/qtqml-modules-qmldir.html#writing-a-qmltypes-file

Но даже и без него, если QtCreator видит исходники, зарегистрированные в qmlRegisterType(), то нормально разворачивает типы.


Спасибо, я тоже склоняюсь к этому варианту.


Так же в этом разделе:
 
MyTetra Share v.0.65
Яндекс индекс цитирования