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

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


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


  错误:C2664:'QTimer :: singleShot':Konvertierung des Parameters 2 von
  QObject *'nicht m” glich中的“ QGraphicsEllipseItem *”
  
  (无法转换/强制转换参数2 ...)


由于我希望在有限的时间内同时显示文本和一些图形,因此我的问题是:
如何才能自动,定时地删除上述“其他”对象?

最佳答案

QGraphicsItem通常不会继承QObject。您需要像这样子类QGraphicsEllipseItem

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


或者,您只需要让场景跟踪要隐藏的项目,然后在需要时将其隐藏即可。 (在子类别的场景或视图中留出一个插槽,用于隐藏或删除该项目。)

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

希望能有所帮助。

10-08 07:05