3

我正在尝试实现的类有问题。基本上,我想在构建类时启动一个单次计时器并将其连接到类插槽之一。目前我的构造函数如下所示:

myclass::myclass(int time)
{
    QTimer::singleShot(time, this, SLOT(myslot()));
}

并在标题中产生错误。我已经发现 myclass 必须是 Q_OBJECT 但这并没有解决错误。有任何想法吗?提前致谢!

4

4 回答 4

2

QGraphicsItem不继承QObject,那么你应该改变myclass

// thanks to WoJo for pointing out the right inheritance order
class myclass : public QObject, public QGraphicsItem
//class myclass : public QGraphicsItem, public QObject
{ Q_OBJECT
...
public slots:
  void myslot();

}

根据我的经验,您需要删除构建目录以强制进行干净的重建。

于 2013-06-20T12:11:40.287 回答
1

您的类是否继承了 QObject、QWidget 或其他小部件?您是否包括<QTimer>在您的程序中?

于 2013-06-20T11:53:43.240 回答
1

改变

QTimer::singleShot(time, this, SLOT(myslot))); // this should give you a syntax error as well

QTimer::singleShot(time, this, SLOT(myslot()));

但要注意;一段时间后调用自己的方法时会引起很多麻烦。当您调用该类对象的某些函数并且计时器结束并直接调用myslot().

于 2013-06-20T11:59:15.157 回答
1

正如已经给出的许多答案所指出的那样,QGraphicsItem 不继承自用于信号和插槽的 QObject。

但是,您可以简单地从 Qt 类QGraphicsObject派生而不是使用 QGraphicsItem 和 QObject 的多重继承,该类旨在提供需要信号和插槽的 GraphicsItem,并且它本身是从 QGraphicsItem 派生的。它还为您提供了您在问题中提到的 QTimer 功能。

于 2013-06-20T13:12:52.900 回答