Как получить событие KeyPress в QAbstractScrollArea - PullRequest
0 голосов
/ 29 декабря 2018

В настроенном виджете, полученном из QAbstractScrollArea, я не могу получить никаких событий клавиатуры через обработчик QAbstractScrollArea::viewportEvent():

#include <QtWidgets>

struct A: public QScrollArea {
    bool viewportEvent(QEvent *e) {
        qDebug() << e;
        return QScrollArea::viewportEvent(e);
    }
};

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    A *a = new A;
    a->viewport()->setFocus();
    a->show();

    return app.exec();
}

Различные эксперименты с focusPolicy и друзьями на обоих QScrollArea и его viewport() тоже не помогли.Любопытно, что обработчик QScrollArea::event() получает ключевые события.

Что мне не хватает?

1 Ответ

0 голосов
/ 29 декабря 2018

Причина, по которой вы не получаете ключевые события, заключается в том, что область просмотра никогда не имеет фокуса, поскольку QAbstractScrollArea всегда устанавливает себя в качестве посредника фокуса виджета области просмотра.Таким образом, линия a->viewport()->setFocus() на самом деле дает фокус на a.

Для получения ключевых событий необходимо переопределить QAbstractScrollArea::keyPressEvent вместо viewportEvent.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...