无法连接qobject的信号

时间:2013-06-15 05:55:44

标签: qt qt-signals

我创建了一个从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*)'

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

我认为你需要一个指针到QObject:

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

编辑:错误消息会抱怨您的示例中无法访问的类型:

  

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

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

尝试在 source 上采取类似行动,例如,将指针添加到operator之前,就像我们为 target 所做的那样。

答案 1 :(得分:0)

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

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