2

我正在开发一个在QGraphicsScene. 这些项目具有属性,如果选择了该项目,我想在树视图中显示这些属性。如果可能的话,我想坚持使用QObject. 但是,这并不适合我的所有需求,因为我需要沿属性存储一些元数据,例如

  • 用于分组的类别(例如“系统属性”和“用户属性”)
  • 当鼠标悬停在树视图中的属性上时显示的工具提示文本。

Qt 属性浏览器和 Qt 的对象框架的启发,我想实现以下系统:

  1. 场景中的所有项目都派生自PropertyItem(它本身继承 QGraphicsItemQGraphicsObject)。它包含获取和设置属性值的逻辑。
  2. 每个派生的类PropertyItem都有一个 static MetaPropertyItem
  3. AMetaPropertyItem持有类MetaProperty的实例,以便存储有关属性的元数据,例如类别、工具提示字符串和属性的类型。
  4. 每当在场景中选择一个项目时,Property都会为每个MetaProperty关联的MetaPropertyItem. 然后,这些属性会显示在树视图中,并在取消选择该项目时将其删除。

我越想这个设计,就越觉得我做错了什么。看来我只是在复制已经是 Qt 一部分的内容:

PropertyItem     <--> QObject
MetaPropertyItem <--> QMetaObject
MetaProperty     <--> QMetaProperty
Property         <--> needs to be implemented

我还发现了这个bug ticket,它建议将元数据添加到 Qt 属性。不幸的是,到目前为止,它没有引起任何关注。

在寻找替代方案时,我还偶然发现了QMetaPropertyBuilder哪个(可能?)将成为 Qt 5 的一部分。不幸的是,关于这个类的文档很少,而且我从阅读源代码中了解到的内容并不能解决我的问题。

因此,我的问题是:实际上是否有更好的方法可以在不重新实现另一个 Qt 框架的情况下实现我正在寻找的东西?

4

0 回答 0