C ++ソースのQMLから関数を呼び出し、そのc ++関数を使用して、QMLのjavascript部分で同じプロパティで使用できるオブジェクトを返すアプリケーションを作成しています。私は接続とすべてを作りました。QVariantMapを送信して、そのオブジェクトをjavascriptで使用しようとしましたが、そのオブジェクトのプロパティを取得できません
3 に答える
QObject ベースの型を C++ から QML にエクスポートするには、2 つの方法があります。
- プロパティ READer または Q_INVOKABLE 関数からスタンドアロンの QObject を直接返します。プロパティとして返されるオブジェクトには C++ の所有権があり、Q_INVOKABLE オブジェクトには JS の所有権があることに注意してください。このデフォルトの動作はhttp://doc.qt.nokia.com/4.7/qdeclarativeengine.html#setObjectOwnershipで変更できます。
- QObjects の配列を返します。その場合、QObjectList、QDeclarativePropertyMap (QVariantMap ではない)、または QAbstractListModel を使用する必要があります。
公開するクラスは QObject (または UI コンポーネントの場合は QDeclarativeItem) から継承する必要があり、QML コードをロードする前に main() または Qt プラグインにそれらの型を登録する必要があります。
http://developer.qt.nokia.com/doc/qt-4.7/declarative-tutorials-extending-chapter1-basics.htmlをご覧ください。
オブジェクトをC++からQMLに関数の戻り値として渡すには、C ++コードの型であってもQVariant
、戻り値の型はである必要があります。QVariantMap
したがって、initialize
関数のシグネチャを次のように変更するだけです。
QVariant initialize();
他に何も変更せずに、プロパティにアクセスできます。
その返されたオブジェクトのメソッドを呼び出したいという後のコメントに関しては、それは不可能です。返されるオブジェクトは、名前と値のペアのセットにすぎません。id
たとえば、オブジェクトにプロパティを持たせたい場合は、オブジェクトを返す前に、C++insert
でそのキーを持つ値を指定する必要があります。QVariantMap