错误:没有用于调用'QTimer :: singleShot'的匹配函数

时间:2013-06-20 11:51:07

标签: c++ qt

我正在尝试实现的类有问题。基本上,我想在类构造时启动单击计时器并将其连接到其中一个类槽。目前我的构造函数看起来像这样:

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

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

4 个答案:

答案 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功能。