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