我已经将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()方法。 什么是正确的解决方案? 谢谢!
答案 0 :(得分:0)
您可以尝试将对象强制转换为数据类型,并在成功操作时对其进行操作。像那样:
ResizableRectItem* item = qobject_cast<ResizableRectItem*>(scene()->items().at(0));
if (item)
{
int idx = item->getIndex();
}
的更多信息
答案 1 :(得分:0)
什么是正确的解决方案?
如果您可以重新考虑代码中的逻辑,这样您就不必依赖ResizableRectItem
的界面,那将是最好的。
如果你不能这样做,那么,你需要使用dynamic_cast
。
QGraphicsRectItem* gitem = scene()->items().at(0);
ResizableRectItem* item = dynamic_cast<ResizableRectItem*>(gitem);
if ( item != nullptr )
{
int idx = item->getIndex();
}