访问子类QGraphicsRectItem对象的方法

时间:2015-09-30 14:59:50

标签: c++ qt qgraphicsscene

我已经将QGraphicsRectItem子类化,名为ResizableRectItem。我添加了一个新成员(int index)和两个方法(getIndex()和setIndex())。 我正在将ResizableRectItems添加到QGraphicsScene

ResizableRectItem* item1 = new ResizableRectItem(selrect.normalized());
scene()->addItem(item1);

稍后我必须调用getIndex()方法,但我只访问scene()的items()项目,但是

int idx = scene()->items().at(0)->getIndex();

不正确,因为scene() - > items()是QGraphicsItem并且没有getIndex()方法。 什么是正确的解决方案? 谢谢!

2 个答案:

答案 0 :(得分:0)

您可以尝试将对象强制转换为数据类型,并在成功操作时对其进行操作。像那样:

ResizableRectItem* item = qobject_cast<ResizableRectItem*>(scene()->items().at(0)); 
if (item)
{
   int idx = item->getIndex();
}

http://doc.qt.io/qt-5/metaobjects.html

的更多信息

答案 1 :(得分:0)

  

什么是正确的解决方案?

如果您可以重新考虑代码中的逻辑,这样您就不必依赖ResizableRectItem的界面,那将是最好的。

如果你不能这样做,那么,你需要使用dynamic_cast

QGraphicsRectItem* gitem = scene()->items().at(0);
ResizableRectItem* item = dynamic_cast<ResizableRectItem*>(gitem);
if ( item != nullptr )
{
   int idx = item->getIndex();
}