What should I return in eventFilter?
-
Hi,
For example I have mainWindow and myTextEdit ( inherits QTextEdit ) on it. I install in mainWindow eventFilter for mainWindow and myTextEdit like this:
mainWindow constructor: textEdit = new MyTextEdit(this); textEdit->installEventFilter(this); installEventFilter(this);
And of course I have eventFilter in mainWindow:
bool MainWindow::eventFilter(QObject *object, QEvent *event) { if( object == textEdit ) { if(event->type() == QEvent::Type::KeyPress) { qInfo()<<"some Text"; event->ignore(); return true; } else { return ...... // I don't know what I should return here } } else if(object == this) { if(event->type() == QEvent::Type::KeyPress) { qInfo()<<"some Text"; event->ignore(); return true; } else { return QMainWindow::eventFilter(object, event); } } }
In
(object == this ( mainWindow ))
I return"QMainWindow::eventFilter(object, event);"
because MainWindow inherits QMainWindow, so I think I should return in(object == textEdit)
"QTextEdit::eventFilter(object, event);"
. But I can't. I get errors:- call to non-static member function without an object argument
- eventFilter is protected member of QAbstractScrollArea
-
Hi,
For example I have mainWindow and myTextEdit ( inherits QTextEdit ) on it. I install in mainWindow eventFilter for mainWindow and myTextEdit like this:
mainWindow constructor: textEdit = new MyTextEdit(this); textEdit->installEventFilter(this); installEventFilter(this);
And of course I have eventFilter in mainWindow:
bool MainWindow::eventFilter(QObject *object, QEvent *event) { if( object == textEdit ) { if(event->type() == QEvent::Type::KeyPress) { qInfo()<<"some Text"; event->ignore(); return true; } else { return ...... // I don't know what I should return here } } else if(object == this) { if(event->type() == QEvent::Type::KeyPress) { qInfo()<<"some Text"; event->ignore(); return true; } else { return QMainWindow::eventFilter(object, event); } } }
In
(object == this ( mainWindow ))
I return"QMainWindow::eventFilter(object, event);"
because MainWindow inherits QMainWindow, so I think I should return in(object == textEdit)
"QTextEdit::eventFilter(object, event);"
. But I can't. I get errors:- call to non-static member function without an object argument
- eventFilter is protected member of QAbstractScrollArea
@qwe3 said in What should I return in eventFilter?:
QTextEdit::eventFilter(object, event);
Well, this of course cannot work because eventFilter is not static and MainWindow is not a subclass of QTextEdit.
You can simply return false, so it will go to your textEdit.
https://doc.qt.io/qt-5/qobject.html#eventFilter
"In your reimplementation of this function, if you want to filter the event out, i.e. stop it being handled further, return true; otherwise return false." -
Hi,
For example I have mainWindow and myTextEdit ( inherits QTextEdit ) on it. I install in mainWindow eventFilter for mainWindow and myTextEdit like this:
mainWindow constructor: textEdit = new MyTextEdit(this); textEdit->installEventFilter(this); installEventFilter(this);
And of course I have eventFilter in mainWindow:
bool MainWindow::eventFilter(QObject *object, QEvent *event) { if( object == textEdit ) { if(event->type() == QEvent::Type::KeyPress) { qInfo()<<"some Text"; event->ignore(); return true; } else { return ...... // I don't know what I should return here } } else if(object == this) { if(event->type() == QEvent::Type::KeyPress) { qInfo()<<"some Text"; event->ignore(); return true; } else { return QMainWindow::eventFilter(object, event); } } }
In
(object == this ( mainWindow ))
I return"QMainWindow::eventFilter(object, event);"
because MainWindow inherits QMainWindow, so I think I should return in(object == textEdit)
"QTextEdit::eventFilter(object, event);"
. But I can't. I get errors:- call to non-static member function without an object argument
- eventFilter is protected member of QAbstractScrollArea
-
@jsulm @eyllanesc Thank you for replies.
@eyllanesc Why QMainWindow::eventFilter(object, event); ? I don' see link between QMainWindow and myTextEdit class.
-
@jsulm @eyllanesc Thank you for replies.
@eyllanesc Why QMainWindow::eventFilter(object, event); ? I don' see link between QMainWindow and myTextEdit class.
-
@eyllanesc But if I return
QMainWindow::eventFilter(object, event);
, other events than QEvent::Type::KeyPress will go to event() method of myTextEdit ? -
@eyllanesc But if I return
QMainWindow::eventFilter(object, event);
, other events than QEvent::Type::KeyPress will go to event() method of myTextEdit ?@qwe3 I do not understand you. If you already returned true in the event:
bool MainWindow::eventFilter(QObject *object, QEvent *event) { if(event->type() == QEvent::Type::KeyPress) { qInfo()<<"some Text"; event->ignore(); return true; } return QMainWindow::eventFilter(object, event); }
-
@eyllanesc Ok, I understand :)