QT:选中复选框时忽略关键事件

QT: Ignore key events on checkbox selection

本文关键字:事件 复选框 QT      更新时间:2023-10-16

我在Windows上有一个QT应用程序,它有一个使用箭头键的模式,还有一个应该完全忽略这些箭头键的模式。也就是说,我希望箭头键在用户选中一个框后不会触发任何事件。

我看到一个帖子,其中建议eventFilter(),但我不明白如何使用它。下面是侦听用户的复选框事件,并在用户检查后触发。在 else 部分中,我希望eventFilter()适用于箭头键,但到目前为止我无法让它运行。

void MainWindow::on_checkBoxSmartCutMode_stateChanged(int arg1)
{
    if (arg1 == 0)
    {
     // do as usual, arrow keys should work
    }
    else
    {
        eventFilter(); // if any arrow key is pressed, ignore the event
    }
}

有什么建议吗?

您可以通过覆盖 keyPressEvent 并使用 keyEvent 作为密钥筛选器并测试复选框状态。

例:

void MainWindow::keyPressEvent(QKeyEvent *event)
{
    // check your checkbox state
    if (ui->poCheckBox->checkState() == Qt::Unchecked)
       // do as usual, arrow keys should work
       return;
    switch(event->key())
    {
      case Qt::Key_Left:
      case Qt::Key_Right: // add more cases as needed
        event->ignore(); // if any arrow key is pressed, ignore the event
        return;
    }
    // handle the event
}