2010-03-19 17 views
-1

Je le code suivant:Quelle est l'erreur dans mon code?

class myslot 
    { 

public: 
    Q_OBJECT 

    myslot() 
     { 

     } 
    ~myslot() 
     { 

     } 

    typedef enum Emycars{volvo,benz,tata}cars; 


public slots: 
void hellowslot(myslot::cars); 
    }; 

void myslot::hellowslot(myslot::cars cars1) 
    { 

    } 


class mysignal 
    { 
public: 
    Q_OBJECT 

public: 
     mysignal(myslot *ourslot) 
      { 

    bool val = QObject::connect(this,SIGNAL(hellowsignal(myslot::Emycars)),ourslot,SLOT(hellowslot(myslot::Emycars))); 
      } 
     ~mysignal() 
      { 

      } 

signals: 
void hellowsignal(myslot::Emycars); 


    }; 

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 

    myslot slot; 
    mysignal sig(&slot); 


    // DeleteNow w; 
    // w.showMaximized(); 
    return a.exec(); 
} 

Quelle est l'erreur dans mon code? Est-ce que la façon dont j'ai écrit se connecte pour la fonction qui reçoit un enum droit ou non?

Répondre

7

Pour utiliser le mécanisme signal/slot les classes doivent hériter de QObject (soit directement, soit à partir d'une sous-classe de QObject comme QWidget) et se déclarent en tant que telle en utilisant la macro Q_OBJECT. Par conséquent, vos numéros mysignal et myslot doivent tous deux hériter de QObject. De plus

vous devez placer le droit macro après l'accolade d'ouverture de votre classe, cela devrait donner:

class myslot : public QObject 
{ 
    Q_OBJECT 
public: 
// .../... 
}; 

class mysignal : public QObject 
{ 
    Q_OBJECT 
public: 
// .../... 
}; 
0

Vous avez un problème avec la connexion signal/fente? Si oui, alors peut-être vous devriez faire:

bool val = QObject::connect(this, SIGNAL(hellowsignal(myslot::cars)), ourslot, SLOT(hellowslot(myslot::cars)));

becouse vous déclarez vos emplacements avec MySlot :: voitures et non MySlot :: Emycars. Le compilateur Metaobject crée simplement des chaînes liées à vos machines à sous, c'est pourquoi votre connexion peut ne pas fonctionner.