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