2016-03-19 11 views
0

Ich frage mich, wie ich Rad Klickereignis von Mauspresse Ereignis unterscheiden kann. Weil ich unterschiedliche Behandlung für diese zwei Ereignisse im pyside machen will. Momentan wird jedes Mal, wenn ich auf den Radknopf klicke, das Ereignis durch mousepressevent abgefangen. Kann mir jemand erklären?Wie kann ich das Klickereignis der Radschaltfläche vom Mausereignis unterscheiden?

Edit: ich dies in einer Unterklasse von QGLWidget Klasse

+0

Das Rad wird wahrscheinlich als mittlerer Knopfklick interpretiert? –

+0

@FrankOsterfeld Das Rad wird als Scroll und nicht als mittlerer Tastenklick interpretiert. Wenn ich eine Ereignisbehandlungsfunktion für Radmitte-Taste schreibe, klicken Sie in WheelEvent, Maus Drücken erhält das mittlere Knopfklickereignis – Johnnylin

+0

@Johnnylin. Genau so soll es funktionieren. Ein Mausrad kann sowohl zum Scrollen ** als auch zum Klicken verwendet werden. Die meisten modernen Mäuse haben drei Klickknöpfe, und viele haben fünf. Sie können zwischen ihnen unterscheiden, indem Sie die Methoden 'button()' und/oder 'buttons()' eines [QMouseEvent] (http://doc.qt.io/qt-4.8/qmouseevent.html) untersuchen. – ekhumoro

Antwort

2

Von seinen Namen implementieren möchten, die mousePressEvent für Mausklicks verantwortlich ist, während die wheelEvent nur zum Scrollen ist. Die wheelEvent fängt nicht das Rad klicken klicken. So wird die Qt's API entwickelt, wenn es um die Verarbeitung von Mausereignissen geht.

Um zu separieren, welche Maustaste gedrückt wird (rechts, Rad oder links), verwenden Sie buttonproperty of QMouseEvent.

Dies ist, wie der Code wie mit C aussehen würde ++ (Ich stelle mir es einfach, es zu pyside zu übersetzen ist)

void GLWidget::mousePressEvent(QMouseEvent *event) // redefine the mouse event 
{ 
switch(event->button()) { 
case Qt::LeftButton: 
    // do stuff for left button pressed 
    break; 
case Qt::MiddleButton: 
    // do stuff for wheel button pressed 
    break; 
// ... 
} 
} 

Also, für pyside, brauchen Sie nur die button Eigenschaft event in mousePressEvent vergleichen und sehen, ob es , Qt.RightButton oder Qt.MidButton ist. Ich hoffe, das hilft.

+0

Danke. Genau das möchte ich. Und, können Sie erklären, was der Gebrauch des Ereignisfilters ist? Weil ich dachte, ich sollte einen Ereignisfilter verwenden, um sie zu unterscheiden. – Johnnylin

+0

Eine Beispielverwendung eines Ereignisfilters ist es, Ereignisse zu steuern, wenn es um mehrere 'QObject' geht - angenommen, dass ein Elternobjekt ein untergeordnetes Objekt enthält und Sie Kinderereignisse von einem Elternobjekt verarbeiten möchten. In diesem Fall würden Sie den Ereignisfilter 'childObject-> installEventFilter (übergeordnet)' und dann im übergeordneten Objekt 'eventFilter()' die Ereignisse von 'child' verarbeiten, während sie das 'Elternelement' sind. Beziehen Sie sich auf [dieses konkretere Beispiel] (http://www.informit.com/articles/article.aspx?p=1405544&seqNum=2), wenn weitere Details benötigt werden. – vicrucann

Verwandte Themen