QWidget how to get keyPressEvent inside child widgets

I have one main one Widget, and inside this main widget there are QListWidgettwo buttons. I redefine keyPressEventinside the main widget (inherited from QWidget). I can receive events keyPresswhen the focus is not on QListWidget, but when the focus is inside QListWidget, I cannot receive these events keyPress. Below is the code I used for this:

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    this->setFocusPolicy(Qt::StrongFocus);

    ui->listWidget->addItem(new QListWidgetItem("Item1"));
    ui->listWidget->addItem(new QListWidgetItem("Item2"));
    ui->listWidget->addItem(new QListWidgetItem("Item3"));

}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::keyPressEvent(QKeyEvent *event)
{
    qDebug() << "event->key(): " << event->key();

    QWidget::keyPressEvent(event);
}
+4
source share
2 answers

In the title:

protected:

     bool eventFilter(QObject *obj, QEvent *event);

In the constructor:

qApp->installEventFilter(this);

Filter:

bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{   
    if (event->type() == QEvent::KeyPress)
    {
        QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
           qDebug() << "key " << keyEvent->key() << "from" << obj; 
    }
    return QObject::eventFilter(obj, event);
}

With this event filter, you can catch all keystroke events and check who the emit ( obj) event is

:

if ( obj == ui->listWidget )
//event from QListWidget

:

bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{ 
    if (event->type() == QEvent::KeyPress)
    {
        if(obj == ui->listWidget)
        {
            QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
            if(keyEvent->key() == Qt::Key_Up)
                qDebug() << "Up";
            if(keyEvent->key() == Qt::Key_Down)
                qDebug() << "Down";
        }
    }
    return QObject::eventFilter(obj, event);
}
+11

.

, , , . , ; , .

QObject:: installEventFilter() , QObject:: eventFilter(). , , . QObject:: removeEventFilter() .

+3

All Articles