我发现自己在尝试从 C++ 动态实例化自定义 QML 元素。
所以,要布局问题:
Node我有一个从任何 UI 中抽象出来的轻量级对象数据结构。- 由于内存繁重
QObject且派生,我必须按需实例化 UI 元素。 - 每个
Node人都有一个_ui*成员,每个UI人都有一个_node*成员。 - 每个
Node都有一个独特的_id,每个UI有一个IDPROPERTY,交付自_node*。ID 属性是只读的,因为 ID 是在Node实例化时设置的,不应修改。 - QML 元素必须只有带有默认参数的构造函数,例如不能向构造函数传递任何东西。
- 当 QML 元素创建时,
_node*成员是,因此任何试图访问 ID 属性的NULLQML 子元素都不能,因为实例化时没有设置,只能通过 aux 方法设置,但由于该属性实际上是一个只读常量,实例化后,当实际设置的成员时不再更新。UI_node*_node*UI
所以基本上,我需要能够在创建时将链接设置Node为每个对应的链接UI,以便UIQML 元素可以访问它,但我不能将它传递给构造函数,并且由于属性是只读的,因此它被读取只有一次,在UI实例化时,当_node* UI成员仍然是时NULL,因此无法访问 ID 值。
想到的一个快速而肮脏的解决方案是NOTIFY idChanged()在设置成员后实例化时添加一个要发出的信号,_node*即使 ID 属性从未真正改变,不能也不应该,并添加对 ID getter 的检查 - 返回一个假虚拟如果_node*是任意值,否则从成员中NULL获取 ID 值。_node*不用说,这并不优雅,并且增加了一些开销,并且虚拟 ID 值是潜在的蠕虫罐头,因此欢迎任何关于如何击败 QML 内部不良设计的想法。