Le 14/11/2017 à 10:26, Phil Thompson a écrit :
On 13 Nov 2017, at 11:32 pm, VA <[email protected]> wrote:

Le 13/11/2017 à 23:15, Phil Thompson a écrit :
On 13 Nov 2017, at 8:02 pm, VA <[email protected]> wrote:

Le 13/11/2017 à 20:35, Phil Thompson a écrit :
On 13/11/2017 18:41, VA wrote:
Le 13/11/2017 à 15:49, Phil Thompson a écrit :
They do receive mouse press events. They are consumed (ie. accepted) and so do 
not make it to the event filter.

Why don't they pass through the event filter as other events?
That’s the way Qt works. If a mouse or key event is ignored (rather than 
accepted) then it will be passed to the filter.

It's the opposite in Qt, the event filter is tested first, and if the filter 
returns true, the event will not even reach the widget.
See the reference doc:
https://doc.qt.io/qt-5/qobject.html#installEventFilter

And test this code where no text can be typed in a QtWidgets.QTextEdit (and no 
mouse clicks) because an event filter filters events before the QTextEdit 
receives them:

class Filter(QObject):
        def eventFilter(self, target, ev):
                return True

app = QApplication([])
f = Filter()
sci = QTextEdit()
sci.installEventFilter(f)
sci.show()
app.exec_()

So the events (like mouse press) sent to QsciScintilla should always go through 
the event filter first, and if the filter returns true, the QsciScintilla 
should not receive the event.
So how do you explain the the behaviour of the attached?

Well, I added a print in your sample code in the event() method, and it seems 
with QsciScintilla, event() is called before eventFilter(), as you say.
However, if I replace QsciScintilla with a QLineEdit or a QPushButton, 
eventFilter() is called before event(), so it cannot depend on QEvent.ignore() 
being called with QLineEdit or QPushButton, since ignore() has not been called 
yet. Additionaly, returning True in eventFilter() prevents event() from being 
reached.
My opinion is that QLineEdit or QPushButton have the right behavior (at least, 
it's consistent with the QObject docs I linked to earlier)

Reading QCoreApplication::notify_helper 
(https://code.woboq.org/qt5/qtbase/src/corelib/kernel/qcoreapplication.cpp.html#1159)
 seems to confirm that event filters should be called before delivering an 
event to an object.

Try installing the filter on the viewport().

Using the viewport, it seems to work as expected. I'll look into it to understand why.

Thanks
_______________________________________________
QScintilla mailing list
[email protected]
https://www.riverbankcomputing.com/mailman/listinfo/qscintilla

Reply via email to