将元数据添加到Qt属性

时间:2012-08-13 15:50:53

标签: c++ qt metadata

我正在开发一个在QGraphicsScene上显示项目的应用程序。这些 项目有属性,我想在树视图中显示,如果 项目已被选中。如果可能的话,我想坚持物业系统 由QObject实施。但是,这并不符合我的所有需求,因为我需要 沿着属性存储一些元数据,例如

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

受到Qt Property Browser和Qt对象框架的启发,我想到了 实施以下系统:

  1. 场景中的所有项目都来自PropertyItem(它本身继承 QGraphicsItemQGraphicsObject)。它包含 获取和设置属性值的逻辑。
  2. PropertyItem派生的每个类都有一个静态MetaPropertyItem
  3. MetaPropertyItem按顺序保存班级MetaProperty的实例 存储关于诸如类别的属性的元数据 工具提示字符串和属性的类型。
  4. 每当在场景中选择一个项目时,Property类的实例 是为关联的MetaProperty中的每个MetaPropertyItem创建的。 然后,这些属性将显示在树视图中,并在项目时删除 被取消选择。
  5. 我越是想到这个设计,我就越能感受到我正在做的事情 有问题。似乎我只是复制了已经属于Qt的部分:

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

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

    寻找其他选择,我也偶然发现了QMetaPropertyBuilder 将(可能?)成为Qt 5的一部分。遗憾的是,关于这个类的文档很少 我从阅读资料中了解到它无法解决我的问题。

    因此,我的问题:实际上是否有更好的方法来实现我的目标 寻找没有重新实现另一个Qt框架?

0 个答案:

没有答案