【问题标题】:error: no matching function for call to 'QTimer::singleShot'错误:没有用于调用“QTimer::singleShot”的匹配函数
【发布时间】:2013-06-20 21:12:52
【问题描述】:

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

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

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

【问题讨论】:

  • 你能发一个SSCCE吗?
  • 错误信息的全部内容是什么?
  • 对不起,这台机器上没有代码。昨天遇到这个问题,我想我现在问是否有人知道如何解决它,这样我回家后可以继续工作。如果我们现在找不到解决方案,我将在今晚提供更多信息。
  • 我认为下面 Zaiborg 的回答应该会有所帮助

标签: c++ qt


【解决方案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();

}

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

【讨论】:

  • 谢谢,看起来很有希望。
  • 应该可以解决问题;忘记了 Q...Item 不是从 QObject 派生的
  • 如果您正在尝试为您的图形制作动画,请查看animation framework。它功能强大且高级别的。
  • 你必须先从QObject派生! class myclass : public QObject, public QGraphicsItemqt-project.org/doc/qt-4.8/…
  • 您只能从一个基于 QObject 的类派生。 AFAIK QGraphicsItem 不是,所以应该没问题
【解决方案2】:

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

【讨论】:

  • 是的,它包含在程序中。该类继承自QGraphicsItem,是错误吗?
  • 不,Zaiborg 回答你,对不起,我没有看到 SLOT(myslot)。当您使用信号或槽时,您始终需要将 () 与名称放在一起,并在需要时输入参数(例如 myslot(int) 或 myslot())。
  • 我认为你是对的。看起来 QGraphicsItem 不继承自 QObject 并且不能使用插槽/信号功能。如果我的类继承自 QObject 和 QGraphicsItem 并让您知道,我会尝试它是否有效。
  • 是的,我不确定 QGraphicsItem 是否达到 100%,但如果您尝试使用 QObject 或其他方法,这将起作用。
【解决方案3】:

改变

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

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

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

【讨论】:

  • 呃,这只是一个错字,抱歉。已经是 ...SLOT(myslot()));
  • 顺便说一句,感谢您对比赛条件的建议,我会记住这一点。
【解决方案4】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-02
    • 1970-01-01
    • 2019-09-25
    • 1970-01-01
    • 1970-01-01
    • 2013-05-05
    • 2012-12-28
    • 2015-03-31
    相关资源
    最近更新 更多