在现有 C++ QT 项目中实例化 QML 对象



我们有一个用C++编写的现有QT项目,我们希望在现有的UI中添加类似mapViewer示例项目的内容。我们无法弄清楚如何实例化mapViewer,并调用初始化/显示它的方法。在在线帮助之后,我们想出了下面的函数,它返回一个 QQuickWidget,我们可以将其添加到 UI 元素中。我们不断收到一个错误,即创建的组件永远不会准备就绪,因此该功能不起作用。

QQuickWidget *buildMap(QWidget *parent)
{
    QQmlEngine *engine = new QQmlEngine;
    QQmlComponent component(engine, "qrc://mapviewer.qml");
    QObject *object = component.create();
    QMetaObject::invokeMethod(object, "initializeMap");
    QQuickWidget *map = new QQuickWidget(engine, parent);
    return map;
}

对我们来说,我们使用mapViewer组件创建一个对象,然后忘记它并没有多大意义,但是我们在网上找到的示例具有与此类似的流程。

尝试这样的事情:

QQuickWidget *buildMap(QWidget *parent) {
    QQuickWidget *map = new QQuickWidget(parent);
    map->setSource(QUrl("qrc://mapviewer.qml"));
    map->show();
    return map;
}

至于initializeMap方法,也许在mapviewer.qmlonCompleted中称呼它?如果你坚持从C++调用它,你仍然可以到达对象map->rootObject()

此外,在创建组件和对象时,无论是从 C++ 还是 QML,检查状态和输出错误字符串(如果有)总是一个好主意,您不要只是假设它都会工作,然后想知道为什么它不工作。

相关内容

  • 没有找到相关文章

最新更新