にアイテムを表示するアプリケーションを開発していますQGraphicsScene
。これらのアイテムにはプロパティがあり、アイテムが選択された場合にツリー ビューに表示したいと考えています。可能であれば、 によって実装されたプロパティ システムに固執したいと思いますQObject
。ただし、プロパティに沿っていくつかのメタデータを保存する必要があるため、これはすべてのニーズに適合しません。
- グループ化に使用されるカテゴリ (「システム プロパティ」や「ユーザー プロパティ」など)
- マウスがツリー ビューのプロパティの上に置かれたときに表示されるツールチップ テキスト。
Qt Property Browserと Qt のオブジェクト フレームワークに触発されて、次のシステムを実装することを考えました。
- シーン内のすべてのアイテムは
PropertyItem
(それ自体がQGraphicsItem
またはを継承するQGraphicsObject
) から派生します。プロパティの値を取得および設定するためのロジックが含まれています。 - から派生したすべてのクラスに
PropertyItem
は static がありますMetaPropertyItem
。 - は、カテゴリ、ツールチップ文字列、プロパティのタイプなどのプロパティに関するメタデータを格納するために
MetaPropertyItem
、クラスのインスタンスを保持します。MetaProperty
- シーンで項目が選択されるたびに、クラスのインスタンスが関連付けられた から
Property
すべてに対して作成されます。これらのプロパティはツリー ビューに表示され、アイテムの選択が解除されると削除されます。MetaProperty
MetaPropertyItem
このデザインについて考えれば考えるほど、何か間違ったことをしているような気がします。すでにQtの一部であるものを複製しているようです:
PropertyItem <--> QObject
MetaPropertyItem <--> QMetaObject
MetaProperty <--> QMetaProperty
Property <--> needs to be implemented
Qt プロパティにメタデータを追加することを提案するこのバグ チケットも見つけました。残念ながら、これまで注目されていませんでした。
代替案を探しているとQMetaPropertyBuilder
、Qt 5 の一部になる (おそらく?) ものも見つけました。
したがって、私の質問:別の Qt フレームワークを再実装せずに、探しているものを実際に達成するためのより良い方法はありますか?