2015-12-05 3 views
0

Donc, fondamentalement, j'ai hérité de QPushButton et je veux gérer le signal directement dans la classe. J'ai aussi promu le bouton que je veux dans cette nouvelle classe.Impossible de configurer la méthode de la classe héritée en tant que slot pour le signal de clic

Je l'ai fait:

QObject::connect(ui->pickWatermarkButton, SIGNAL(clicked()),ui->pickWatermarkButton, SLOT(handleButton())); 

Le handleButton existe et est déclarée comme une fente publique. Cependant, quand je clique sur le bouton, rien ne se passe.

J'ai changé la fente à une fonction de localisation, à l'intérieur de la fenêtre principale, et surprise, cela fonctionne! Apparemment, il ne refuse de travailler que lorsque j'essaie d'utiliser comme slot une méthode dans la classe héritée!

+2

Assurez-vous qu'il y a une macro 'Q_OBJECT' dans votre classe de boutons et que' handleButton() 'est déclaré dans la section' slots: '. – LogicStuff

+1

Comme dit LogicStuff. Si ce n'est pas la macro Q_OBJECT manquante, ajoutez votre en-tête de sous-classe QPushButton ici. Vérifiez également la console pour les erreurs de l'appel connect(). –

+0

J'ai ajouté la macro Q_OBJECT. Mais maintenant je reçois des erreurs de "référence indéfinie à vtable". Et oui, j'ai défini un destructeur! – GCooper

Répondre

0

Pour résoudre ce problème, ajoutez simplement la macro Q_OBJECT à votre classe héritée.

Si vous obtenez des erreurs de compilation de "référence indéfinie à vtable", assurez-vous que vous avez défini un destructeur. Si elles apparaissent encore, faites un clic droit sur votre projet et sélectionnez "Exécuter qmake", puis reconstruisez votre projet.