我创建了一个从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*)'
我该如何解决这个问题?
答案 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()));