16 Stimmen

Unterscheidung zwischen Einzel- und Doppelklick-Ereignissen in Qt

Ich habe eine QAbstractItemView die auf Einzel- und Doppelklick-Ereignisse reagieren muss. Die Aktionen sind unterschiedlich, je nachdem, ob es sich um einen Einfach- oder Doppelklick handelt. Das Problem besteht darin, dass das Einzelklickereignis vor dem Doppelklickereignis empfangen wird.

Gibt es eine empfohlene Methode/Best Practice für die Unterscheidung zwischen diesen beiden? Ich möchte nicht die Einzelklick-Aktion durchführen, wenn der Benutzer tatsächlich doppelt geklickt hat.

Ich verwende Qt 4.6

12voto

Bill Punkte 13799

Es ist ein gutes UI-Design, wenn Sie sicherstellen, dass Ihre Einzelklicks und Doppelklicks konzeptionell zusammenhängen:

Single-Click: select icon
Double-Click: select icon and open it

Single-Click: select color
Double-Click: select color and open palette editor

Beachten Sie, dass in diesen Beispielen die Einzelklick-Aktion eigentlich eine Untermenge des Doppelklicks ist. Das bedeutet, dass Sie Ihre Einzelklick-Aktion normal ausführen können und nur die zusätzliche Aktion ausführen, wenn der Doppelklick kommt.

Wenn Ihre Benutzeroberfläche so etwas tut wie:

Single-Click: select icon
Double-Click: close window

Dann stellen Sie Ihre Benutzer auf die Probe. Selbst wenn sie sich daran erinnern, was ein Einfachklick im Gegensatz zu einem Doppelklick bewirkt, ist es sehr leicht, die Maus beim Doppelklick versehentlich zu weit zu bewegen oder zu lange zu warten.

Editar:

Es tut mir leid, das zu hören.

In diesem Fall fand ich diese beiden Artikel nützlich:

7voto

Piotr Dobrogost Punkte 39650

Die Antwort finden Sie im Thread mit dem Titel Doppelklick-Erfassung en QtCentre Forum;

Sie könnten eine Zeitschaltuhr haben. Starten Sie den Timer im ReleaseEvent-Handler und stellen Sie sicher, dass die Zeitüberschreitung lang genug ist um zuerst den Doppelklick zu verarbeiten. Dann können Sie im Ereignis für den Doppelklick Handler können Sie den Timer anhalten und verhindern, dass er ausgelöst wird. Wenn ein Doppelklick Click-Handler nicht ausgelöst wird, wird der Timer eine Zeitüberschreitung und ruft einen Slot der Ihrer Wahl auf, wo Sie den Einzelklick behandeln können. Dies ist natürlich ein fieser Hack, hat aber eine Chance zu funktionieren.

wysota

0voto

Trilarion Punkte 9841

Mit PySide, der Python-Anbindung von Qt 4.8, habe ich gesehen, dass einzelne Klicks eine QEvent.MouseButtonPress Ereignis und Doppelklicks liefern ein einzelnes QEvent.MouseButtonPress Veranstaltung, dicht gefolgt von einer QEvent.MouseButtonDblClick . Die Verzögerung beträgt etwa 100ms unter Windows. Das heißt, Sie haben immer noch ein Problem, wenn Sie zwischen Einzel- und Doppelklicks unterscheiden müssen.

Die Lösung braucht eine weitere QTimer mit einer etwas höheren Verzögerung als der eingebauten Verzögerung (was einen gewissen Overhead bedeutet). Wenn Sie eine QEvent.MouseButtonPress Ereignis starten Sie Ihren eigenen Timer, im Falle einer Zeitüberschreitung ist es ein einziger Klick. Im Falle eines QEvent.MouseButtonDblClick es sich um einen Doppelklick handelt und Sie den Timer anhalten, damit er nicht als Einfachklick gezählt wird.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X