2010-01-05 3 views
0

Je viens de commencer avec QT et je connais le concept de signal/slot mais en l'implémentant j'ai un problème. jeter un oeil à mon code:impossible de lier un signal à une fente dans QT

#include "test.h" 
#include <QCoreApplication> 
test::test() 
{ 
    // TODO Auto-generated constructor stub 

} 

test::~test() 
{ 
    // TODO Auto-generated destructor stub 
} 



void test::fireslot(){ 

    qDebug("the slot fired"); 

} 

void test::dosignaling(){ 
    QObject::connect(this,SIGNAL(callslot()),this,SLOT(fireslot())); 

} 

Note: J'ai ajouté la macro Q_OBJECT et hériter de QObject dans test.h

et voici mon conteneur de test

#include "test.h" 
int main(int argc, char *argv[]) 
{ 
    QCoreApplication a(argc, argv); 

    //test t1(); 
    test *t2 = new test(); 


    t2->dosignaling(); 


    return a.exec(); 
} 
Code

compilez parfait mais le rien ne va arriver. Je ne suis pas sûr de quelle partie je me suis trompé: -?

Répondre

5

Le code que vous avez dans une fente void test::dosignaling se connecte « fireslot » à un signal « callslot », mais où êtes-vous émettant le signal callslot?

Vous devez changer votre code et placez votre QObject::connect() dans le constructeur (ou ailleurs) et changer votre méthode dosignaling à:

void test::dosignaling() 
{ 
    emit callslot(); 
} 

, vous avez également pas montré le fichier d'en-tête, mais il devrait inclure une déclaration du signal d'appel, comme ceci:

class test 
{ 
    ... 
signals: 
    void callslot(); 
}; 
+1

Et dans l'en-tête, ajouter des emplacements: void fireslot(); –

+1

ouais, eh bien je me suis dit qu'il l'avait déjà fait car il y a une implémentation de fireslot –

Questions connexes