为什么我得到“QDeclarativeComponent:Component not ready”错误?

时间:2013-12-18 08:47:20

标签: c++ qt qml

我做了一些事情,但坚持一个特定的例子。代码就像

MyItem.qml

 import QtQuick 1.0

 Item {
     function myQmlFunction(msg) {
         console.log("Got message:", msg)
         return "some return value"
     }
 }

的main.cpp

 QDeclarativeEngine engine;
 QDeclarativeComponent component(&engine, "MyItem.qml");
 QObject *object = component.create();

 QVariant returnedValue;
 QVariant msg = "Hello from C++";
 QMetaObject::invokeMethod(object, "myQmlFunction",
         Q_RETURN_ARG(QVariant, returnedValue),
         Q_ARG(QVariant, msg));

 qDebug() << "QML function returned:" << returnedValue.toString();
 delete object;

一个简单的但是当我在我的qt(5.0)中运行此代码时,它显示了类似的内容 QDeclarativeComponent:组件尚未就绪。

我知道我错过了什么。在谷歌我发现该方法应该声明为Q_INVOKABLE但我不明白为什么?

1 个答案:

答案 0 :(得分:0)

在QML中创建组件时,第一步是解析QML文件。这是你在调用时发生的事情:

QDeclarativeComponent component(&engine, "MyItem.qml");

然后,在对QDeclarativeComponent::create进行任何调用之前,您必须等待组件状态传递到Ready。您可以通过处理statusChanged信号跟踪状态更改。

组件准备就绪后创建组件实例。