从QQuickWidget上下文中调用QML方法

时间:2014-05-26 23:52:25

标签: c++ qml qt5

我在我的程序中使用新Qt 5.3中的QQuickWidget。我想从C ++中调用QML中的函数。 QML文件非常简单:

import QtQuick 2.2
Rectangle {
    width: 300
    height: 300
    color: "red"
    function test() {
        return 5;
    }
}

C ++部分也非常简单:

QQuickWidget *quickWidget = new QQuickWidget(QUrl::fromLocalFile(filePath));
quickWidget->setResizeMode(QQuickWidget::SizeRootObjectToView);
QVariant returnedValue;
// here I need a reference to some QObject    
QMetaObject::invokeMethod(obj, "test",Q_RETURN_ARG(QVariant, returnedValue));

我试过了:

  • QObject * obj = quickWidget;
  • QObject * obj = quickWidget-> rootContext() - > contextObject()
  • QQuickView视图(quickWidget-> engine(),this); QObject * obj = view.rootObject();

没有任何帮助。 returnedValue始终无效。

所以我的问题是 - 我怎样才能得到这个obj?或者,简单来说 - 如何从QML上下文调用我的QQuickWidget函数?

2 个答案:

答案 0 :(得分:3)

建议不要 这样做,但你可以这样做:

Rectangle {
    objectName: "myObj"
}

然后从C ++使用view->rootObject()->findChild<QObject *>("myObj");


请考虑使用其他设计,例如通过Connections QML元素将该javascript函数连接到从C ++对象发出的信号。

答案 1 :(得分:1)

好的,我找到了答案。

QObject *obj = quickWidget->rootObject();

适合我