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

时间:2017-11-20 09:11:51

标签: c++ qt events

我在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
    }

}

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

您可以通过覆盖keyEvent使用keyPressEvent作为关键过滤器,并测试您的复选框状态。

示例:

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
}