我对QGraphicsRectItem进行了子类化,名为ResizableRectItem。我添加了一个新成员(GetIndex )和两个方法(getIndex()和setIndex() )。我正在将ResizableRectItems添加到QGraphicsScene中
ResizableRectItem* item1 = new ResizableRectItem(selrect.normalized());
scene()->addItem(item1);稍后,我必须调用getIndex()方法,但我只访问场景()的items()上的项,但是
int idx = scene()->items().at(0)->getIndex();是不正确的,因为场景()->items()是QGraphicsItem,没有getIndex()方法。正确的解决办法是什么?谢谢!
发布于 2015-09-30 15:41:01
正确的解决办法是什么?
如果您能够重新考虑代码中的逻辑,使您不必依赖于ResizableRectItem的接口,那将是最好的。
如果您不能这样做,那么您将需要使用dynamic_cast。
QGraphicsRectItem* gitem = scene()->items().at(0);
ResizableRectItem* item = dynamic_cast<ResizableRectItem*>(gitem);
if ( item != nullptr )
{
int idx = item->getIndex();
}发布于 2015-09-30 15:39:50
您可以尝试将对象转换为您的数据类型,并在成功的情况下对其进行操作。就像这样:
ResizableRectItem* item = qobject_cast<ResizableRectItem*>(scene()->items().at(0));
if (item)
{
int idx = item->getIndex();
}更多信息请访问http://doc.qt.io/qt-5/metaobjects.html
https://stackoverflow.com/questions/32869436
复制相似问题