MyCppClass
QML 用の C++ を公開する C++ プラグインを作成しました。関数は機能しますが、同じインスタンスのプロパティをQ_INVOKABLE
「見る」ことができません。Q_PROPERTY
些細なことを仮定しMyCppClass
ます:
class MyCppClass : public QObject {
Q_OBJECT
Q_PROPERTY(int value READ value WRITE setValue NOTIFY valueChanged)
public:
MyCppClass();
virtual ~MyCppClass();
Q_INVOKABLE void myInvokeFunc();
int value();
void setValue(int i);
signals:
void valueChanged(int);
private:
int m_iValue;
};
QML の使用例:
// FILE: MyQml.qml
import QtQuick 2.1
import QtQuick.Controls 1.0
import QtQuick.Window 2.0
import MyCppPlugin 1.0
Item {
MyCppClass { //<==OK
id: myClass //<==OK
value: 42 //<==QML LOAD ERROR
}
Button {
text: "Hello"
onClicked: {
myClass.myInvokeFunc() //<==OK
}
}
どうしたの:
- 成功: C++ プラグインは QML の「インポート」を介してロードされます
- 成功: QML で C++ オブジェクトをインスタンス化する
- 成功
Q_INVOKABLE
: QML から関数を呼び出す - FAIL :同じC++ オブジェクト から QML のプロパティにアクセスしています (QML の読み込みに失敗し、エラー: "存在しないプロパティ "値" に割り当てることができません") .... 割り当て/バインディングは QML ファイルの読み込みに失敗し、"読み取り" どのプロパティも "未定義" になります)
これは私には意味がありません(Qt 5.1.1、Win7)。プラグインがロードされ、C++ オブジェクトがインスタンス化され、関数が動作しますが、どうやらプロパティQ_INVOKABLE
を「見る」ことができません。Q_PROPERTY
質問: インスタンスで機能するが、その同じインスタンスのプロパティがまだ利用できないシナリオは何ですか?Q_INVOKABLE
Q_PROPERTY