2013-05-03 1 views
3

Я хотел бы использовать как Qt Quick, так и Qt Widgets для отображения пользовательского интерфейса. Проблема в том, что я хочу создать как код C++. (Пользовательский интерфейс не определяется во время компиляции.) Нет проблем с последним. К сожалению, я не могу найти примеров, как создать декларативную сцену во время выполнения. Похоже, что можно создать текстовую строку с кодом QML и интерпретировать ее. К сожалению, я хочу что-то более здравомыслящее. Является ли это возможным?Qt Быстрые элементы из C++ - Создание и уничтожение - возможно ли это?

Я играю с QT5, но меня тоже интересуют ответы на вопросы QT4.

+0

Можно проверить этот ответ: http://stackoverflow.com/questions/16002310/qml-how-to-draw-multiple-rectangulars-in-random-places/16004056#16004056 - есть несколько разных способы создания объектов QML динамически, но все это из QML. Создание QML из C++ считается контрпродуктивным, потому что оно отрицает разделение логики (C++) и UI (QML). – dtech

+0

Проблема заключается в том, что пользовательский интерфейс должен генерироваться во время выполнения. – Michas

+0

С QML пользовательский интерфейс ВСЕГДА генерируется во время выполнения, QML - это только разметка, которая передается, вызывается соответствующие конструкторы и задаются соответствующие свойства. Вы можете генерировать строки QML и «выполнять их» в качестве ответа, который я связывал с показанными. – dtech

ответ

1

Я считаю, что это даст вам ответ: 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); 
} 
+0

В моей ситуации сцена создается во время выполнения. Нет файла с описанием для загрузки. – Michas

+0

Грязным обходным путем было бы временно вывести сцену в файл, а затем загрузить его. – DRAX

0

Казалось бы, генерация кода QML во время выполнения - это путь. В зависимости от того, насколько динамичен пользовательский интерфейс, вы можете пойти с библиотекой шаблонов текста, см., Например, C++ HTML template framework, templatizing library, HTML generator library. Таким образом, у вас есть скелет для вашего пользовательского интерфейса в файле, и вы просто заполняете заменяемые части вызовом библиотеки шаблонов по вашему выбору, подобно тому, как генерируются динамические веб-страницы.

Смежные вопросы