我希望能够使用自定义类的实例作为参数从 C++ 调用 QML 函数,然后从 QML 操作该实例。
这是我到目前为止所做的:
数据.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);
主文件
#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();
}
回调.qml
import QtQuick 2.0
Item {
function callMeBack(data) {
console.log(data.text)
}
}
控制台输出"Undefined"
. 我做错什么了吗 ?
将函数体更改为console.log(data)
输出"QVariant(Data)"
时,为什么我不能访问 data 的 text 属性?
我尝试Data
使用注册为 QML 类型,qmlRegisterType<Data>();
但这并没有改变任何东西。