我做了一些事情,但坚持一个特定的例子。代码就像
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但我不明白为什么?
答案 0 :(得分:0)
在QML中创建组件时,第一步是解析QML文件。这是你在调用时发生的事情:
QDeclarativeComponent component(&engine, "MyItem.qml");
然后,在对QDeclarativeComponent::create
进行任何调用之前,您必须等待组件状态传递到Ready
。您可以通过处理statusChanged信号跟踪状态更改。
组件准备就绪后创建组件实例。