我正在尝试实现的类有问题。基本上,我想在构建类时启动一个单次计时器并将其连接到类插槽之一。目前我的构造函数如下所示:
myclass::myclass(int time)
{
QTimer::singleShot(time, this, SLOT(myslot()));
}
并在标题中产生错误。我已经发现 myclass 必须是 Q_OBJECT 但这并没有解决错误。有任何想法吗?提前致谢!
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();
}
根据我的经验,您需要删除构建目录以强制进行干净的重建。
您的类是否继承了 QObject、QWidget 或其他小部件?您是否包括<QTimer>
在您的程序中?
改变
QTimer::singleShot(time, this, SLOT(myslot))); // this should give you a syntax error as well
到
QTimer::singleShot(time, this, SLOT(myslot()));
但要注意;一段时间后调用自己的方法时会引起很多麻烦。当您调用该类对象的某些函数并且计时器结束并直接调用myslot()
.
正如已经给出的许多答案所指出的那样,QGraphicsItem 不继承自用于信号和插槽的 QObject。
但是,您可以简单地从 Qt 类QGraphicsObject派生而不是使用 QGraphicsItem 和 QObject 的多重继承,该类旨在提供需要信号和插槽的 GraphicsItem,并且它本身是从 QGraphicsItem 派生的。它还为您提供了您在问题中提到的 QTimer 功能。