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