2010-07-21 4 views
0

J'essaye de mettre à jour la barre d'état avec le FPS du contenu d'un QGLWidget. Je les ai connecté comme suit (en classe MainWin):Qt4 slots and signals: Qt4 a du mal à trouver le signal

glWidget = new GLWidget; 
ui.verticalLayout->addWidget(glWidget); 

connect(glWidget,  SIGNAL(updateFPSSignal(float) ), 
     this,   SLOT( updateFPSSlot(float) )); 
} 

La fente est la suivante:

void MainWin::updateFPSSlot(float fps){ 
this->statusBar()->showMessage(QString::number(fps), 0); 
} 

Dans la définition de classe MainWin, j'ai:

public slots: 
    void updateFPSSlot(float fps); 

Et la Le signal est le suivant: (D'après ce que je comprends, cela ne devrait pas être ici, mais le programme refuse de compiler sans cela).

void GLWidget::updateFPSSignal(float fps){} 

J'ai ce qui suit dans la définition de classe GLWidget:

signals: 
    void updateFPSSignal(float fps); 

Après avoir calculé les fps, je l'appelle:

emit updateFPSSignal(fps); 

Cependant, lorsque l'application démarre, ce qui suit est imprimé:

Object::connect: No such signal QGLWidget::updateFPSSignal(float) in /Users/usm/Desktop/OGLTest/MainWin.cpp:12 
Object::connect: (receiver name: 'MainWinClass') 

Aucun des tutoriels que j'ai lus ne semble avoir d'aide, et je suis sûr que la solution est simple pour quelqu'un de plus expérimenté.

Merci.

+0

Veuillez écrire «Qt» et non «QT» pour plus de clarté. Merci – rubenvb

Répondre

4

avez-vous

class GLWidget : public QGLWidget { 

    Q_OBJECT 

    /* ... rest of declaration ... */ 

}; 

dans votre déclaration de classe? et avez-vous mis votre en-tête glwidget.h dans la section HEADERS de votre fichier .pro? l'implémentation d'un signal est faite par moc, pas vous.

+0

Ah oui, je mets Q_OBJECT dans la déclaration de classe et j'ai aussi besoin de lancer qmake avant de recompiler. Merci! – usm

+0

Cela devrait également se débarrasser du besoin d'accolades après la déclaration du signal, car moc devrait maintenant générer une implémentation pour vous. –