qt eventfilter для qtreeview не работает? - PullRequest
1 голос
/ 14 февраля 2012

Я хочу, чтобы "событие" происходило при нажатии клавиши ввода, когда выбрано qtreeview. Поскольку я предпочитаю не создавать подкласс qtreeview (проще для дизайнера) - я попытался установить фильтр событий. Однако, похоже, это не сработало:

Класс просто содержит открытую функцию:

bool InputTreeEventHandler::eventFilter(QObject *obj, QEvent *event) const {
    if (event->type() == QEvent::KeyPress) {
        QKeyEvent *keyevent = dynamic_cast<QKeyEvent*>(event);
        QTreeView* tree = dynamic_cast<QTreeView*>(obj);
        if (keyevent->key() == Qt::Key_Enter) {
            //code
        }
    } else {
        return false;
    }

}

И событие добавляется следующим образом:

ui.InputTreeView->installEventFilter(InputTreeKeyboardEater.get());

Где ui.InputTreeView - это древовидная структура, которую я хочу использовать при нажатии клавиши ввода, и InputTreeKeyboardEater (общий) указатель на объект InputTreeEventHandler

Если поставить точку останова в начале функции выше, это показывает, что весь обработчик событий даже не вызывается - что я могу сделать неправильно?

1 Ответ

4 голосов
/ 14 февраля 2012

См. здесь - QObject::eventFilter не const, что объяснило бы вашу проблему.InputTreeView ищет неконстантную версию, которой там нет.Также eventFilter защищен не публично, хотя я не думаю, что это критично.

...