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