【问题标题】:Unable to connect signal from qobject无法连接来自 qobject 的信号
【发布时间】:2013-06-15 05:55:43
【问题描述】:

我创建了一个继承自 QObject 的简单类并创建了一个信号,如下所示:

testobject.h:

#ifndef TESTOBJECT_H
#define TESTOBJECT_H

#include <QObject>

class testObject : public QObject
{
    Q_OBJECT
public:
    explicit testObject(QObject *parent = 0);

signals:
    somethingChanged();

public slots:

};

#endif // TESTOBJECT_H

testobject.cpp:

#include "testobject.h"

testObject::testObject(QObject *parent) :
    QObject(parent)
{
}

然后尝试制作一个在发出信号时应该停止的 QEventLoop:

testObject *foo = new testObject;
QEventLoop loop;
connect(foo, SIGNAL(somethingChanged()), loop, SLOT(quit()));
loop.exec();

但是编译器会这样抱怨:

error: no matching function for call to 'TestObjectHere::connect(objectTest&, const char*, QEventLoop&, const char*)'

我应该如何解决这个问题?

【问题讨论】:

  • 您是否重命名了类 testObject?如果是这样,您在尝试构建项目之前是否运行 qmake
  • 不,testObject 是 Qt Creator 创建的类。我尝试运行 qmake 并清理/重建我的项目,但没有结果
  • 你在哪里调用 connect 它在 QObject 类中?无论如何尝试使用完全限定名称:QObject::connect(...
  • void testFunction() 内,从表单的构造函数中调用。 QObject::connect 给出同样的错误

标签: qt qt-signals


【解决方案1】:

我认为你需要一个指向 QObject 的 指针

connect(foo, SIGNAL(somethingChanged()), &loop, SLOT(quit()));

编辑:错误消息抱怨您的样本中不可见的类型:

错误:没有匹配的函数调用 'TestObjectHere::connect(objectTest&, const char*, QEventLoop&, const char*)'

objectTest& 也应该改为指针,而不是引用。在发布的代码中, foo is 是一个指针,那么您应该在传递给编译器的实际代码与您显示的代码之间存在不匹配。

尝试对 source 进行类似操作,例如,将指针添加到操作符之前,就像我们对 target 所做的那样。

【讨论】:

    【解决方案2】:

    结合两者:CapelliC的回答和我的评论:

    QObject::connect(foo, SIGNAL(somethingChanged()), &loop, SLOT(quit()));
    

    【讨论】:

    • 正是我想要发布的内容。谢谢,伙计们!
    猜你喜欢
    • 2015-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多