Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ QT:忽略复选框选择上的关键事件_C++_Qt_Events - Fatal编程技术网

C++ QT:忽略复选框选择上的关键事件

C++ QT:忽略复选框选择上的关键事件,c++,qt,events,C++,Qt,Events,我在Windows上有一个QT应用程序,它有一个使用箭头键的模式,也有一个完全忽略这些箭头键的模式。也就是说,我希望箭头键在用户选中某个框后不会触发任何事件 我看到一篇帖子,其中建议使用eventFilter(),但我不知道如何使用它。下面是一个复选框事件,它侦听用户,并在用户检查后触发。在else部分中,我希望eventFilter()可以用于箭头键,但到目前为止,我无法让它运行 void MainWindow::on_checkBoxSmartCutMode_stateChanged(int

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

}
有什么建议吗?

您可以通过覆盖和测试复选框状态将其用作密钥筛选器

例如:

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
}

有一个基本版本。您只需将其更改为使用箭头键并选中复选框状态。尽管您可以直接执行
if(checkbox.isChecked())返回。这很有意义。我接受这个答案。您还可以告诉我如何从另一个处理关键事件的类访问
ui
?您希望从其他类访问ui的原因是什么?使用Qt signle/slot在类之间进行通信。我有一个类负责处理箭头键事件,另一个类负责进行必要的计算并决定发生什么。我不希望所有内容都在同一个类中。在您的UI类中,使用
stateChanged(bool)
创建信号,并在处理程序类中为密钥锁状态保留私有布尔成员。并使用连接到UI信号的正确插槽更新此成员。