@Robotex

Как создать объект QML отображающий свойства C++-объекта?

Т.е. допустим есть у нас в игре объект космический корабль. Все манипуляции с ним (в том числе создание и удаление) производятся на стороне C++. От QML требуется только нарисовать его на сцене в соответствии с текущими свойствами. Как такое можно реализовать? Основная проблема: создать QML-объект одновременно с C++-объектом и при этом обеспечить отображение свойств корректного C++-объекта.
  • Вопрос задан
  • 1517 просмотров
Решения вопроса 1
Zifix
@Zifix Куратор тега Qt
Barbatum
Делается довольно просто:
  • создаем класс корабля, все поля которого прокидываем через Q_PROPERTY
  • регистрируем тип корабля в движке
  • создаем класс обвязки, который будет отдавать список кораблей через QQmlListProperty и QList (либо просто прокидываем в движок свою модель отнаследованную от QAbstractListModel)
  • получаем этот список в QML и рисуем как хотим
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
S-ed
@S-ed
Комбайнёр
Qt позволяет создавать QML из строки:
var newObject = Qt.createQmlObject(
'import QtQuick 1.0;Rectangle {color: "red"; width: 20; height: 20}',
    parentItem, "dynamicSnippet1");
doc.qt.io/qt-4.8/qdeclarativedynamicobjects.html

Затем просто добавляете/меняете нужные поля:
newObject->setProperty("width", 500);
doc.qt.io/qt-5/qtqml-cppintegration-interactqmlfro...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы