2013-10-11 10 views
6

と非QObjectのクラスを使用するために、任意のチャンスがQObject秒でなければなりません。私は非QObjects(別名POCO、QObjectから派生したものではなく、Qtメタシステムに登録されています)を使用できます。QMLで使用<a href="http://qt-project.org/doc/qt-5.0/qtqml/qtqml-cppintegration-exposecppattributes.html" rel="noreferrer">Exposing Attributes of C++ Types to QML</a>クラスのとおりQML

ない場合は、私のオブジェクトはQML準拠させるための単純な一般的なラッピング方式があります。私が考えることができるのは、単純なQObjectに動的なプロパティを追加することです。

それとも私がすべてでラップする必要はありませんので、暗黙のうちにQML対応型に変換する方法はありますか?

+0

ありがとう!先週(ベルリンで)Qt DevDays'13に行ったことがありますか?それから、私たちは会ったかもしれません! – mlvljr

+0

包括的な答えをありがとう。もう少し質問を残しておきますが、あなたの答えを受け入れる可能性が高いです。私はベルリンにいませんでした。 –

+0

ありがとう、私の郵便はプロフィールにあります、そして、私は実際にこれを少し試してみる気がします。あなたが望むなら、私たちはいくつかのことを試すことができます。ベルリンのイベントは素晴らしかった:) – mlvljr

答えて

2

これは実際には1つの話題です。 ( - ことを試したことがない、W/O任意のメンバーへのアクセスを単なるブラックボックスとして)

私はあなたがあなた自身のポッドを登録し、ITOの周りやQML側内でそれらを渡すことが信じています。メンバーにアクセスするには、QMLシングルトン上のメソッドの形式か、インスタンス単位のラッパーとして効果的に機能するQtObjectの子孫のいずれかで、get/setラッパーコードを使用できます。

ダイナミックなプロパティは現在サポートされていません - おそらくそれは価値のあるものではありません(しかし、をプロパティにバインドするのはですはるかに簡単で、それでもQObjectsになります)。

暗黙的に変換するには、何らかのプリプロセッサ(これはおそらく実行可能ですが、時間がかかりますが、結果をQtに戻して(そして生涯サポートするための)徹底的な対策が必要です)。

私はこの道を行くだろう:

  • 問題のオブジェクトは、パフォーマンスを測定、のQObjectこと(そして、それは大丈夫だ場合は、それに固執する)ことができるかどう
  • ない場合は、値によって不透明なポッドを渡す試みそれが動作する場合は、ラッパーの足場を作成し、それが速いかどうかを確認する/前のオプションよりもメモリの使用量を増やす
  • b)ダイナミックQObjectプロパティ
  • 極端な速度/ memの要件の場合ラッパーを自動生成し、Qtプロジェクトビルドパイプラインにフックするツールを作成することを検討してください。

これは、カスタムPODが組み込みのサポートと同じレベルを楽しむのではなく、

  • POD
  • リスト
  • QObjectを
  • :標準言語慣行が見-変更のため-ているタイプのプロパティを(もちろん、ポインタでどこでも通過した)ガベージコレクトQObjectのインスタンスを、操作を中心に構築されています
  • バリアント(IIRC、メンバーの変更を見ていない)upvotingため
関連する問題