Qt World Summit: Submit your Presentation

EventFilter on QTreeView, no Qt::Key_delete event

  • Hi

    I want to be able to react on the "Delete" key in the QTreeView. Therefore I install an eventfilter on the QTreeView instance in the constructor of my mainwindow, as suggested in the docs:

    @ArinnotechModule::ArinnotechModule(QWidget *parent) :
    ui(new Ui::ArinnotechModule)

    Declaration and implementation of the event-filter method:
    class ArinnotechModule : public QMainWindow

    explicit ArinnotechModule(QWidget *parent = 0);
    virtual bool eventFilter(QObject * target, QEvent * event);
    @bool ArinnotechModule::eventFilter(QObject *target, QEvent event)
    bool key = false;
    bool delKey = false;
    if( event->type() == QEvent::KeyPress ){
    key = true;
    QKeyEvent * keyEvent = static_cast<QKeyEvent
    if( keyEvent->key() == Qt::Key_Delete ){
    delKey = true;
    return true;
    return QMainWindow::eventFilter( target, event );

    I do get several keypress-events, e.g. F5, Enter, Space, Home, End, ... but Delete never makes it to the filter. What could be the problem?

    What I've tried so far:

    Subclass QTreeView, overwrite keyPressEvent(...)-method. Same behaviour.

    Sublcass QTreeView, overwrite event(...)-method. Same behaviour.

    The QTreeView is located in:
    QMainWindow->QWidget (Central Widget)->QTabWidget->QWidget (page)->QTreeView

    Any ideas why the filter does not capture the event?

  • Well, turns out I had prepared a QAction in the UI-Designer with the shortcut set to the "Delete" key. I figure the QAction object got the event first and handled it returning "true". After removing the shortcut everything worked as expected...

Log in to reply