2013-06-15 3 views
2

J'ai créé une classe simple héritée de QObject et créé un signal, comme celui-ci:Impossible de se connecter le signal de 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) 
{ 
} 

Et puis essayé de faire un QEventLoop qui devrait s'arrêter lorsque le signal est émis:

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

Mais compilateur se plaint comme ceci:

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

Comment dois-je résoudre ce problème?

+0

Avez-vous renommé la classe _testObject_? Si oui avez-vous _run qmake_ avant d'essayer de construire votre projet? – Zlatomir

+0

Non, _testObject_ est la classe créée par Qt Creator. J'ai essayé d'exécuter qmake et de nettoyer/reconstruire mon projet, mais sans résultat –

+0

Où appelez-vous le _connect_ c'est dans une classe QObject? Quoi qu'il en soit, essayez avec le nom complet: _QObject :: connect (..._ – Zlatomir

Répondre

0

Je pense que vous avez besoin d'un pointeur à QObject:

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

modifier: le message d'erreur se plaint de types qui ne sont pas visibile de votre échantillon:

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

aussi objectTest & devrait être changé en un pointeur, au lieu d'une référence. Dans le code affiché, foo est un pointeur, alors vous devriez avoir une discordance entre le code actuel passé au compilateur et ce que vous montrez.

Essayez de faire de même sur la source , par exemple, faites précéder le pointeur à l'opérateur, comme nous l'avons fait pour cible.

0

combiner les deux: réponse de CapelliC et mon commentaire:

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

Exactement ce que je voulais poster. les gars! –

Questions connexes