Qt使用singleShot Timer从QGraphicsScene中删除QGraphicsItem?

时间:2013-05-22 16:48:16

标签: c++ visual-studio qt graphics signals-slots

虽然可以使用计时器和Qt的信号槽机制自动从场景中删除QGraphicsTextItem,如

QTimer::singleShot(1000, QGraphicsTextItem*, SLOT(deleteLater()));

其他图形对象(QGraphicsItem,QGraphicsEllipseItem)似乎不会继承QObject,因此在编译时会导致错误:

  

错误:C2664:'QTimer :: singleShot':Konvertierung des Parameters 2 von   'QObject *'中的'QGraphicsEllipseItem *'nicht m“glich

     

(参数2的转换/转换......不可能)

由于我希望文本和一些图形在一段时间内一起显示,我的问题是: 如何实现自动,定时删除上述“其他”对象?

1 个答案:

答案 0 :(得分:1)

QGraphicsItem s不会正常继承QObject。你需要像这样继承QGraphicsEllipseItem

class AutoHidingItem : public QObject, public QGraphicsEllipseItem 
{
    Q_OBJECT
    // ...
}

或者您只需让您的场景跟踪要隐藏的项目,然后在需要时隐藏它。 (在子类化的场景或隐藏或删除项目的视图中创建一个插槽。)

编辑:@thuga指出QGraphicsEllipseItem不会继承QObject,而QGraphicsTextItem已经存在。编辑回答显示这一点。

希望有所帮助。