2009-08-21 10 views
7

Okay, mit Qt möchte ich wissen, wie man den aktuellen Zustand der Maus zu jedem Zeitpunkt - ohne ein MouseEvent erkennen kann.So erkennen Sie den Mausstatus in Qt ohne ein MouseEvent

Mit QCursor :: pos() können Sie seine Position ermitteln, aber gibt es eine Möglichkeit, den aktuellen Status der Schaltflächen zu bestimmen?

Grundsätzlich, ich bin auf der Suche nach dem Zustand der Maus, wenn ein Timer ausgelöst wird, so dass es nicht zu einem bestimmten MouseEvent verwandt werden, und es gibt keine MouseEvent abzufragen. Ich muss wissen, wie man den Zustand der Maus - insbesondere den Zustand der Tasten - abfragt, ohne ein MouseEvent zu haben.

Oh, und ich benutze Qt 3, wenn also eine solche Funktion in Qt 4 hinzugefügt wurde, aber nicht in Qt 3, hilft es mir nicht viel (obwohl es immer noch schön wäre, darüber zu wissen).

Antwort

1

Ist es eine schwierige Anforderung, dass Sie MouseEvent nicht verwenden? Oder können Sie MouseEvents indirekt verwenden?

Wenn Sie für jede Schaltfläche eine boolesche Variable erstellen und diese mit gedrückten/gelösten Mausereignissen aktualisieren, können Sie sich die Werte der relevanten Booleschen Werte anzeigen lassen, wenn der Timer abläuft.

+0

Es kann nicht ereignisbezogen sein. Ich meine, wenn es eine Funktion gäbe, die Ihnen den aktuellen Mauszustand durch das Zurückgeben eines MouseEvent geben würde, wäre das in Ordnung, aber ich kann kein Ereignis behandeln. Ich muss einfach den aktuellen Zustand der Maus abfragen können, ohne mich darum kümmern zu müssen, welche Ereignisse ausgelöst wurden oder nicht. –

+0

Warum haben Sie keinen Zugriff auf die Ereignisse? Machst du dir Sorgen über die Leistung? Wie wird Ihr Code in einer GUI ohne Versand aufgrund eines Ereignisses ausgeführt? – Bill

+0

Es ist ein komplexes System, das definitiv nicht fehlerfrei ist, und ich kann nicht garantieren, dass ich keine Ereignisse verpasse. Also, während es so eingerichtet ist, dass der Timer _should_ nur gehen kann, wenn die Maus im richtigen Zustand ist, muss ich in der Lage sein, den Zustand der Maus zu überprüfen, wenn es ausgeht, um sicherzustellen, dass keine Ereignisse durch die Risse fielen. –

14

Qt::MouseButtons QApplication::mouseButtons() [static]:

Gibt den aktuellen Status der Tasten auf der Maus. Der aktuelle -Status wird synchron aktualisiert, da die Ereigniswarteschlange von Ereignissen geleert wird, die den Mausstatus spontan ändern (QEvent::MousePress und Ereignisse).

Es sollte darauf hingewiesen werden, dass dies möglicherweise nicht die tatsächlichen Tasten auf theInput Gerät zum Zeitpunkt des Anrufs, sondern die Maustasten wie letzten in einem der oben genannten Ereignisse gemeldet widerspiegeln. Wenn keine Maustasten gehalten werden, wird Qt::NoButton zurückgegeben.

Edit: hmm, ich habe gerade bemerkt, dass Sie über Qt3.3 gefragt. Diese Antwort gilt für Qt4, fürchte ich.

+0

Nun, wie ich in der Frage sagte, ist es immer noch schön zu wissen, ob es einen Weg zu tue es in qt4, auch wenn es in qt3 nicht gibt.Wenn nichts anderes, könnte ich es in einer zukünftigen Version der betreffenden Anwendung verwenden (und es ist einfach immer gut, mehr über diese Art von Dingen zu wissen). Die aktuelle Version ist jedoch in Qt3, also wenn es nicht möglich ist, es in Qt3 zu tun, dann habe ich für den Moment kein Glück. Aber wenn es in Qt4 und nicht in Qt3 ist, zeigt das, dass Trolltech Qt weiter verbessert und es zu einem besseren Toolkit macht. –

Verwandte Themen