我想同时使用 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 的骨架,您只需通过调用您选择的模板库来填充变化的部分,类似于生成动态网页的方式。