2

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

テストオブジェクト.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ポインターであるため、コンパイラーに渡される実際のコードと表示されるコードが一致しないはずです。

たとえば、 target に対して行ったように、演算子へのポインターを先頭に追加ます

于 2013-06-15T06:16:54.883 に答える
0

2つを組み合わせる:CapelliCの答えと私のコメント:

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