カスタム クラスのインスタンスをパラメータとして 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);
メイン.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)"
と、 data の text プロパティにアクセスできないのはなぜですか?
Data
を使用してQMLタイプとして登録しようとしましたqmlRegisterType<Data>();
が、これは何も変わりません。