Wie kann ich verhindern, dass die enter-Taste, das schließen von meinen QDialog (Qt 4.8.1)
Ich habe eine QDialog
mit einem QDialogButtonBox
. Die OK und Abbrechen Tasten aktiv sind. Gelegentlich habe ich das deaktivieren oder verstecken Sie die OK-Taste, basierend auf den Zustand von meinem dialog. Es scheint, egal was ich mache, die Enter-Taste immer auch ein aktivieren der OK-Taste. Ich wirklich NICHT wollen, dass dies passiert. Ich habe versucht:
- Festlegen von Standard-und autoDefault Eigenschaften auf false jedes mal, wenn ich ein - /ausblenden/aktivieren/deaktivieren/was auch immer die Taste
- Installation eines Ereignis-filter auf die OK-Taste abfangen, wichtige Ereignisse (gedrückt und losgelassen) für den return, enter und space
- Einstellung der Fokus der Politik auf die Schaltfläche, um NoFocus
Und mit allen Kombinationen die Dinge vor, die Enter-Taste, noch akzeptiert Sie den dialog. Hat jemand eine Ahnung wie man zu blockieren? Es scheint, wie ich sollte in der Lage sein zu blockieren, etwas so einfaches wie das?
Kannst du die post-Ereignis-filter code?
Ist es deine eigene dialog-oder Sie sprechen über die standard-Dialoge von Qt bietet?
Meine dialog-Klasse
Nicht verwenden Ok-und Abbrechen-button, fügen Sie Ihre eigenen button zu QDialogButtonBox.
aber dann habe ich nicht den Vorteil, die Tasten richtig positioniert auf unterschiedlichen OS ' s
Ist es deine eigene dialog-oder Sie sprechen über die standard-Dialoge von Qt bietet?
Meine dialog-Klasse
Nicht verwenden Ok-und Abbrechen-button, fügen Sie Ihre eigenen button zu QDialogButtonBox.
aber dann habe ich nicht den Vorteil, die Tasten richtig positioniert auf unterschiedlichen OS ' s
InformationsquelleAutor cppguy | 2013-04-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den key-press-Ereignis-Filterung sollte der dialog selbst, weil das code-handling und die Weiterleitung der
Return
undEnter
- Tasten, um die Standard-Schaltfläche ist inQDialog::keyPressEvent
.Oder
Dies hat nicht funktioniert. Ich bekomme nicht keyPressEvent Anruf in meinem QDialog Klasse, wenn die EINGABETASTE gedrückt wird.
Sie sollten nicht ignore() das Ereignis, sondern es zu akzeptieren und nichts zu tun. Aber wenn die Abbrechen-Schaltfläche ist immer noch aktiviert, und kann den Fokus erhalten, es könnte noch aktiviert werden, indem Sie die Enter-Taste, und das Dialogfenster zu schließen.
seltsam diese hat nicht funktioniert entweder. Weder die filter-Methode oder Aufhebung der key-press-Ereignis aufgerufen.
übergeordnete Schlüssel-Presse-event für mich gearbeitet.
InformationsquelleAutor alexisdm
QDialog bietet einen privaten slot genannt
accept()
. Wenn QDialogButtonBox strahltaccepted()
(durch drücken der return-Taste oder klicken auf Ok), dass die private Ablage wird aufgerufen. So trennen Sie die Verbindung.disconnect(ui->buttonBox, SIGNAL(accepted()), this, SLOT(accept()));
Dieser arbeitete für mich.
InformationsquelleAutor Md. Minhazul Haque
Das problem ist, die Ereignis-filter sollte nicht installiert werden auf die OK-Schaltfläche.
Wenn die OK-Schaltfläche deaktiviert ist, dann wird es nicht erhalten, das enter-Ereignis. Welches widget den Eingabefokus hat. Und wenn Sie nicht akzeptieren Sie die enter-Ereignis, dann
QDialog
wirdaccept()
selbst.Zwei Möglichkeiten um das problem zu lösen:
1) Überschreiben
QDialog::accept()
, und rufen SieQDialog
's akzeptieren-Methode in die neueaccept
funktioniert nur, wenn das OK ist aktiviert2) Installieren Sie einen Ereignis-filter auf jedes widget im dialog, die nicht akzeptieren Sie die enter-Taste (line-Bearbeitungen, ...).
Den Ereignis-filter wäre in etwa so:
Und im code für jedes widget im dialog:
InformationsquelleAutor coyotte508
Wenn Sie normale QPushButtons auf den dialog dann, wenn die Schaltflächen der autoDefault und/oder default-Eigenschaften legen Sie auf Sie, dann bekommst du eine Standard-Schaltfläche - das ist das, was Sie die enter-Taste auslöst. In diesem Fall, loszuwerden, autoDefault auf die Tasten und drücken Sie die EINGABETASTE in einem anderen widget nicht mehr schließt sich der dialog.
Im Falle einer QDialogButtonBox kann man wohl Durchlaufen Sie die Tasten, um schalten Sie diese Sachen aus im ctor von Ihrem dialog. Nicht getestet aber sollte funktionieren. Wenn nicht, dann müssen Sie auch sehen, ob es eine Standard-Schaltfläche, die festgelegt wird, auf die QDialog selbst zu.
InformationsquelleAutor Pete
Damit Sie die "OK" - Taste oder "Enter" - Taste schließen-dialog:
in der ui-xml-Datei, entfernen Sie die Verbindung/Steckplatz für annehmen/ablehnen. Dann, in Ihrem code , emmit accept (), Wann und wie erforderlich;
Beispiel aus der ui-Datei, die verbindet accept () - slot:
InformationsquelleAutor Mohammad Kanan
In PySide (und ich kann mir vorstellen PyQt) ich war in der Lage, neu zu definieren, annehmen und ablehnen-Funktionen des QDialog.
Dieser hielt den Datei-dialog schließen und gab mir Zugriff auf die Daten, wenn Sie auf die 'ok' (annehmen) oder "cancel" (ablehnen) Funktionen ausgelöst wurden (entweder mit der EINGABETASTE oder durch klicken auf die Schaltflächen)
InformationsquelleAutor The Doctor