Qt快速元素从c++ -创建和销毁-是可能的

Qt Quick elements from C++ - Creating and destroying - Is it possible?

本文关键字:创建 元素 c++ Qt      更新时间:2023-10-16

我想同时使用Qt Quick和Qt Widgets来显示用户界面。问题是我想在c++代码中创建这两个。(UI在编译时没有定义。)后者没有问题。不幸的是,我找不到任何例子如何在运行时创建声明性场景。看起来可以用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代码是可行的方法。根据UI的动态程度,你可以使用文本模板库,如c++ HTML模板框架、模板库、HTML生成器库等。通过这种方式,你在一个文件中有了一个UI的框架,你只需通过调用你选择的模板库来填写变化的部分,类似于如何生成动态网页。

相关文章: