Я хотел бы использовать Qt Quick и Qt Widgets для отображения пользовательского интерфейса. Проблема в том, что я хочу создать оба кода на C ++. (Пользовательский интерфейс не определен во время компиляции.) С последним проблем нет. К сожалению, я не могу найти примеров того, как создать декларативную сцену во время выполнения. Похоже, можно создать текстовую строку с кодом QML и интерпретировать ее. Я хочу что-то более вменяемое, к сожалению. Является ли это возможным?
Я играю с QT5, но мне также интересны ответы о QT4.
Я считаю, что это даст вам ответ: http://www.qtcentre.org/threads/48767-Can-a-QML-element-be-displayed-inside-a-QT-C-GUI
Это возможно. Ваш код должен выглядеть так:
// inside custom QGraphicsView class...
...
QGraphicsObject *qmlThing = getQMLGraphicsObjectFromURL(QUrl("pathToYourURL"));
myScene->addItem(qmlThing);
...
QGraphicsObject * MyGraphicsView::getQMLGraphicsObjectFromURL(const QUrl &url) {
QDeclarativeComponent component(new QDeclarativeEngine(), url);
QObject *object = component.create();
return qobject_cast<QGraphicsObject *>(object);
}
Казалось бы, генерация кода QML во время выполнения — это путь. В зависимости от того, насколько динамичным должен быть пользовательский интерфейс, вы можете использовать библиотеку текстовых шаблонов, например, см. Фреймворк HTML C ++, библиотека шаблонов, библиотека генератора HTML для списка этих. Таким образом, у вас есть скелет для вашего пользовательского интерфейса в файле, и вы просто заполняете изменяющиеся части вызовом библиотеки шаблонов по вашему выбору, подобно тому, как создаются динамические веб-страницы.