2016-09-24 9 views
0

ios & androidでQt 5.7を使用しています。私はqmlRegisterTypeへの呼び出しを使用して、QQuickItemビューから派生したMyClassをインスタンス化します。qmlRegisterTypeを実行した後に有効なクラスインスタンスを取得する方法は?

有効なオブジェクトをqmlから戻すにはどうすればよいですか?

+0

MyClassのオブジェクトはC++側で何が必要でしょうか? 同じ結果を得るより良い方法があるかもしれません。 –

答えて

1

あなたは、あなたが探しているオブジェクトを見つけるために、QObjectのツリーをたどることができQQmlApplication::rootObjects()

を参照して、エンジンのルートオブジェクト(複数可)を介してQMLコードによってインスタンス化されたオブジェクトのツリーへのアクセスを得ることができますために。

しかし、C++側でQMLでインスタンス化されたオブジェクトにアクセスすることは、しばしばより良いやり方でできることのためのちょっとしたハックです。

一般的な経験則は、QMLコードに応じてC++コードを避けることです。つまり、静的なC++側を動的なQML側の方法に依存させないようにします。

C++側がデータと機能を提供し、QML側がそのデータを消費し、C++関数をトリガ/コールできるようにすることをおすすめします。

0

コードでは、MyClass QMLカスタムオブジェクトをQMLオブジェクトライブラリに登録しました。それはあなたがこのようなあなたのQMLドキュメントであなたのQMLコンポーネントMyClassのをインスタンス化できるようになる:

import MyClass.1.0 
Item { 

..... 
    MyClass{ 
    } 
} 

だから、登録QMLのオブジェクトは、あなたのQMLはあなたのサンプルコードに記載されたもののようオブジェクトのインスタンス化する可能性を提供します。

あなたのC++クラスのQML「シーン」から任意のオブジェクトにアクセスするには、オブジェクトシーンを読み込み、その子をクロールします。このドキュメントを参照してください:

Interacting with QML Objects from C++

そして、あなたが罰金以上でなければなりません。

もう1つ:C++からQMLオブジェクトを読み込むときに最も一般的な「初回」が必要だと思うので、このセクションにはリンクがあります:「C++からのQMLオブジェクト型のメンバーへのアクセス」 。そこに行って始めてください。

+0

ポインタをありがとう。それは確かに正しい方向に私を得た。 「QMLオブジェクト型のメンバーへのC++からのアクセス」の節を読みました。 qmlアイテムにプロパティを設定できることを理解してください。ここの 'MyClass'は' QQuickitem'から派生したものです。そして、私は別のオブジェクトインスタンスをsetterメソッドの1つに設定する必要があります: 'MyClassObject-> SetOtherObjectInstance(* someOtherObject)'同じ種類のものを行うサンプルコードはありますか?私がやっていることは私が信じる珍しい要件ではありません –

+0

C++からQMLへの依存関係を作成し、QMLツリーの外観を制限するので、C++からQMLインスタンス化オブジェクトへのポインタを取得することは非常にまれです。 'MyClass'がこの' someOtherObject'を動作させる必要がある場合、 'MyClass'がそのオブジェクトを取得する方が良いかもしれません –

関連する問題