Frage

Ich entwickle eine Qt-Anwendung auf Red Hat Linux. Ich möchte Carriage Return-Taste drücken Ereignisse in einem QComboBox erfassen.

Ich habe einen Schlitz auf das Signal editTextChanged() verbunden, die für jeden Tastendruck ausgegeben wird, aber nicht für die Enter-Taste .
Warum so? Gibt es eine andere Art und Weise zu erkennen Wagenrücklauf

War es hilfreich?

Lösung

Ich gehe davon aus Ihnen einen Schlitz geschrieben und verbinden es mit QComboBox::editTextChanged() Signal.
Dieses Signal wird ausgelöst, wenn der Text ändert und Enter nicht den Text ändern, es sie akzeptiert. Wenn Sie erfassen möchten Carriage Return , gibt es eine Reihe von Möglichkeiten, können Sie folgen.

  1. Unterklasse QComboBox.
    Außer Kraft setzt keyPressEvent(): erster Anruf QComboBox::keyPressEvent() und dann prüfen, ob die gedrückte Taste Enter . Wenn es ist, ein Signal aussenden.
    Verwenden Sie diese Unterklasse, wenn Sie benötigen. Suche über Widgets in QDesigner fördern, wenn Sie nicht wissen, wie.

  2. Implementieren Sie eine neue Klasse, die erbt QObject. In dieser Klasse außer Kraft setzen eventFilter(): Überprüfen Sie, ob das Ereignis ein Tastendruck ist. Wenn ja, überprüfen, ob es die ist Enter drücken. Wenn es ist, ein Signal aussenden.
    Dann eine Instanz dieser Klasse erstellen und als Ereignisfilter auf Ihre QComboBox gesetzt. Schließen Sie einen Schlitz an diese Instanz des Signals, die Sie implementiert.

Wenn diese nicht klar sind, empfehle ich die folgenden Seiten lesen:

mit benutzerdefinierten Widgets mit Qt Designer

Qt Events & Ereignisfilter

Andere Tipps

Sie können auch das activated( const QString& ) Signal suchen. Es könnte emittiert werden, wenn der Benutzer Hits ein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top