2016-08-25 1 views
-2

Ich habe Qt 5.6 und ich verwende das gedrückte Signal einer Taste, die dann einen Dialog zeigt. Leider wird die Schaltfläche des Dialogs nicht beim ersten Mal angeklickt, aber der zweite Klick funktioniert einwandfrei. Sie können diese Situation testen, indem Sie einen QMessageBox::information in einem on_someButton_pressed Steckplatz anzeigen.QPushButton ist nicht auf den ersten Klick geklickt

+0

Mit welchem ​​Signal verbinden Sie sich - [geklickt] (http://doc.qt.io/qt-4.8/qabstractbutton.html#clicked) oder [gedrückt] (http://doc.qt.io/qt -4.8/qabstractbutton.html # gedrückt)? – mvidelgauz

+0

wie ich in der Frage erwähnt habe ** gedrückt ** Signal. –

+1

Arbeitete für mich wie erwartet, Dialog Öffnen beim Drücken der Maustaste gedrückt ... Und alles, was ich tat, war ein Widget-Projekt erstellen, fügen Sie eine Schaltfläche im Designer, dann "Gehe zu Slot ...": void MainWindow: : on_pushButton_pressed() {QMessageBox :: information (das, "INFO", "Text ...", QMessageBox :: Ok); } ' – hyde

Antwort

0

Sorry, kann nicht reproduzieren: funktioniert für mich. Und Sie sollten diesen Testfall geschrieben haben. Es sind fast weniger Wörter, um es zu kodieren, als das Problem zu beschreiben.

#include <QtWidgets> 
int main(int argc, char ** argv) { 
    QApplication app{argc, argv}; 
    QPushButton button{"Press me"}; 
    button.setMinimumSize(300, 150); 
    button.setFont(QFont{"Helvetica", 20}); 
    QObject::connect(&button, &QPushButton::pressed, [&]{ 
     QMessageBox::information(&button, "Yes!", "You pressed me."); 
    }); 
    button.show(); 
    app.exec(); 
} 

Als Nebenwirkung, sollten Sie das clicked() Signal verwenden, nicht das pressed() Signal. Usability leidet, wenn Sie das letztere benutzen.

+0

Danke für die Antwort. Aber vielleicht habe ich die Situation nicht gut erklärt. Das Problem ist nicht der Druckknopf "Knopf" selbst, sondern der Druckknopf im Dialog. Zum Beispiel die Schaltfläche OK in der 'QMesageBox'. Sie sollten zweimal auf OK klicken, um den Informationsdialog zu schließen. Danke nochmal für deine Hilfe. –

+0

Haben Sie den obigen Testfall ausgeführt? Es funktioniert gut! –

+0

Tut mir leid, aber ich habe kein Problem damit in Windows. Aber in Beagle Bone Black und einem Touchscreen habe ich dieses Problem. Qt Version 5.6, Werkzeugkette Linaro 4.9, Cross-Compiling von Ubuntu 16.04. Ich denke, das Ereignis wird beim ersten Mal nicht im Qt-Event-Handler behandelt. –

Verwandte Themen