2015-12-22 2 views
1

J'ai un problème avec les emplacements et les signaux. J'ai créé des boutons et les ai connectés à l'emplacement cliqué(). Puis j'ai décidé de connecter les signaux et les slots manuellement et depuis lors quand je clique sur le bouton, il appelle sa fonction deux fois.La fonction connectée au bouton est appelée deux fois après un clic

connect(ui->okButton, SIGNAL(clicked()), this, SLOT(on_okButton_clicked())); 

void settingswindow::on_okButton_clicked() 
{ 
    qDebug() << "ok clicked"; 
    this->close(); 
} 

Je cherchais la réponse sur Google, mais tout ce que je trouvais était le suivant: Where is the generated code of qt signals slots editor mais mon fichier * .ui ressemble à ceci: pastebin to the code. Comme vous pouvez le voir il n'y a qu'une seule ligne avec et rien de plus. Je ne peux pas trouver où les informations sur les signaux et les emplacements sont enregistrées. Reconstruire et nettoyer les options n'aidera pas.

+0

On dirait un bug de Qt. Essayez de supprimer ce bouton et ajoutez-le à nouveau (peut-être changer le nom de celui-ci) – duDE

+1

Je ne sais pas quoi dire ... J'ai lutté pendant 2 heures avec ce problème et je n'ai pas essayé la solution la plus simple . Pour supprimer le bouton et l'ajouter à nouveau avec le même nom .. Merci duDE! – siwers

+1

Ce n'est pas un bug. Regardez, lisez ceci ... http://doc.qt.io/qt-5/designer-using-a-ui-file.html#widgets-and-dialogs-with-auto-connect – Devopia

Répondre

2

Ce n'est pas un bogue dans Qt. Si vous regardez le code généré pour votre fichier ui_*.h, vous remarquerez que la dernière instruction exécutée dans la fonction setupUi() est un appel à QMetaObject::connectSlotsByName().

Étant donné que votre logement est déjà conforme à la convention de nommage que cette fonction recherche, votre logement est automatiquement connecté au signal. En connectant manuellement le signal à l'emplacement, dans votre classe settingswindow, vous dupliquez effectivement la connexion. Comme l'a mentionné @Devopia, il s'agit d'une fonctionnalité documentée.