2016-12-26 3 views
0

Ich fördere meine QLineEdit zu einem benutzerdefinierten Widget und versuchen, Maus Ereignishandler neu zu implementieren. Ich muss alle Mausereignisse außer von Eltern meines QLineEdit -basierten Widgets behandeln (Eltern ist ein benutzerdefinierter scrollbarer Bereich). Alles funktioniert gut außer wheelEvent(). QLineEdit ist immer noch Mausrad und Elternteil ist immer noch nicht.QWheelEvent :: ignore() funktioniert nicht in hochgestuften QLineEdit?

HeightLineEdit::HeightLineEdit(QWidget* parent) : 
QLineEdit(parent) 
{ 
    this->setFocusPolicy(Qt::NoFocus); 
} 

void HeightLineEdit::mousePressEvent(QMouseEvent* event) 
{ 
    event->ignore(); 
} 

void HeightLineEdit::mouseMoveEvent(QMouseEvent* event) 
{ 
    event->ignore(); 
} 

void HeightLineEdit::mouseReleaseEvent(QMouseEvent* event) 
{ 
    event->ignore(); 
} 

void HeightLineEdit::mouseDoubleClickEvent(QMouseEvent* event) 
{ 
    this->setFocus(); 
    this->selectAll(); 
} 

void HeightLineEdit::wheelEvent(QWheelEvent* event) 
{ 
    event->ignore(); 
} 
+0

Versuchen Sie, Ereignisfilter in Eltern zu installieren: http://doc.qt.io/qt-4.8/eventsandfilters.html#event-filters und http://stackoverflow.com/questions/16279003/how-to-disable -scrolling-funktionality-on-wheel-event-qgraphicsview-qt-c –

+0

Parent hat bereits einen Ereignisfilter und das Rad funktioniert einwandfrei im freien Elternraum. Ich brauche Eltern, um mit dem Rad zu scrollen, auch wenn es sich mit dem Kind-Widget überschneidet. – esterlein

Antwort

0

Von den QWheelEvent documentation: mein Hier wird QLineEdit gefördert „Wheel Ereignisse werden in das Widget unter dem Mauszeiger gesendet, aber wenn das Widget das Ereignis sie auf den Fokus-Widget gesendet nicht handhaben.“

Wenn Sie die Eltern wollen, dass sie für das Kind-Widget zu handhaben, können Sie entweder ein event filter auf der Kind-Widget installieren, oder Sie können direkt eine Methode auf dem Eltern-Widget aus dem wheelEvent Methode des Kindes nennen.

+0

Vielleicht verstehe ich Ihren Vorschlag nicht vollständig mit einem Ereignisfilter auf dem Kind-Widget. Es funktioniert genauso wie Handler-Funktionen in meinem Fall. Im Event-Filter liste ich einfach alle 'QEvent'-Typen in' switch {} 'auf und rufe' QEvent :: ignore() 'wo nötig auf. Gleicher Effekt. – esterlein

+0

Ich entfernte den wahrscheinlich verwirrenden Teil, der nur für den zweiten Vorschlag gedacht war, aber nicht sehr relevante Information für die Antwort. – E4z9