我在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
}
}
有什么建议吗?
答案 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
}