私は、C++ からカスタム QML 要素を動的にインスタンス化しようとして困っています。
したがって、問題をレイアウトするには:
- UI から抽象化された軽量の
Node
オブジェクト データ構造があります。 - 大量のメモリ
QObject
と派生メモリがあるため、必要に応じて UI 要素をインスタンス化する必要があります。 - それぞれ
Node
に_ui*
メンバーがあり、それぞれUI
に_node*
メンバーがいます。 - それぞれ
Node
に固有の があり_id
、それぞれUI
に がありID
PROPERTY
、 から配信され_node*
ます。Node
ID はインスタンス化時に設定され、変更できないため、ID プロパティは読み取り専用です。 - QML 要素には、デフォルトのパラメーターを持つコンストラクターのみを含める必要があります。たとえば、コンストラクターに何も渡すことはできません。
- QML 要素が作成されると、
_node*
メンバーはであるため、 ID プロパティにアクセスしようとするNULL
QML 子要素はインスタンス化時に設定されないため、aux メソッドによってのみ設定できますが、プロパティは事実上読み取り専用の定数であり、インスタンス化後、 のメンバーが実際に設定されると更新されなくなります。UI
_node*
_node*
UI
基本的に、QML要素にアクセスできるように、作成時Node
にそれぞれに対応するリンクを設定できる必要がありますが、コンストラクターに渡すことはできません。プロパティは読み取り専用であるため、読み取りますインスタンス化時に、メンバーがまだであるときに 1 回だけなので、ID 値にアクセスできません。UI
UI
UI
_node*
UI
NULL
IDプロパティが実際には変更されず、変更できず、変更されるべきではないにもかかわらず、インスタンス化後のメンバーを設定するときに発行するNOTIFY
idChanged()
シグナルを追加し、IDゲッターのチェックを追加して、偽のダミーを返すことです。の場合は_node*
任意の値、それ以外の場合はメンバーから ID 値をフェッチします。言うまでもなく、これはエレガントではなく、いくらかのオーバーヘッドが追加され、ダミーの ID 値はワームの可能性があるため、QML 内部の不適切な設計を無効にする方法についてのアイデアを歓迎します。_node*
NULL
_node*