【发布时间】:2013-05-22 12:13:15
【问题描述】:
情况如下:
- 有两个类同时继承了
QGraphicsItem和QObject-Car和Bike。 - 使用
QGraphicsScene myScene可视化每个类的多个对象。 - 有时两个对象被选中,可通过
myScene.selectedItems()获得 - 为交互
Car - Car、Bike - Bike、Bike - Car定义了不同的行为。
由于QGraphicsItem 不继承自QObject,因此我无法在以下期间对项目调用metaObject()->className():
foreach(QGraphicsItem* item,this->scene.selectedItems())
{
item->metaObject()->className(); --error 'class QGraphicsItem' has no member named 'metaObject'
}
可以使用QGraphicsItem::data,但需要在创建对象时设置执行setData(...)。
问:有什么方法可以获取selectedItems 列表中存在哪些对象的信息(最好使用className()),以便使用正确的交互函数?
【问题讨论】:
-
为什么“setData(...)”不是一个可行的选择?或者,您可以尝试 dynamic_casts。您也不能使用 metaObject 信息,因为“item”是 QGraphicsItem 类型,但由于您的类也继承自 QObject,因此将 item 转换为 QObject* 并使用存储在那里的信息应该是安全的。
标签: c++ qt qt4 multiple-inheritance