2

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

测试对象.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

测试对象.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*)'

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

4

2 回答 2

0

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

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

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

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

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

尝试在source上采取类似的行动,例如,像我们对target所做的那样,预先添加指向运算符的指针。

于 2013-06-15T06:16:54.883 回答
0

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

QObject::connect(foo, SIGNAL(somethingChanged()), &loop, SLOT(quit()));
于 2013-06-15T06:31:54.810 回答