1
我希望能够从C++调用QML函数,并将自定义类的实例作为参数,然后从QML操作实例。从C++以自定义类型为参数的QML回调
这里是我做过什么至今:
Data.h
class Data : public QObject
{
Q_OBJECT
Q_PROPERTY(QString text READ text WRITE setText)
public :
Data() : QObject(), _text("Foo") { }
virtual ~Data() { }
Data(const Data & other) { _text = other._text; }
QString text() const { return _text; }
void setText(const QString & text) { _text = text; }
private :
QString _text;
};
Q_DECLARE_METATYPE(Data);
Main.cpp的
#include "Data.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
Data callBackData;
QQmlEngine engine;
QQmlComponent rootComponent(&engine, QUrl::fromLocalFile("CallBack.qml"));
QObject * rootObj = rootComponent.create();
QMetaObject::invokeMethod(rootObj, "callMeBack",
Q_ARG(QVariant, QVariant::fromValue(callBackData)));
return app.exec();
}
CallBack.qml
import QtQuick 2.0
Item {
function callMeBack(data) {
console.log(data.text)
}
}
控制台输出"Undefined"
。我做错什么了吗 ?
当将函数体更改为console.log(data)
时,它输出"QVariant(Data)"
,为什么我不能访问数据的文本属性?
我试过使用qmlRegisterType<Data>();
注册为Data
作为QML类型,但这并没有改变任何东西。
谢谢。它帮助!奇怪的是,这只能使用'QObject *'而不是'Data *'来存储分配的数据。 – 2013-03-17 20:58:14
我认为是因为'Data'类型没有注册到QML,因此QML无法识别它。但QML可以识别'QObject *'类型。 – Dickson 2013-03-18 04:30:35