C++ 如何禁用Qt Mainwindow快捷方式应用于无模式对话框

C++ 如何禁用Qt Mainwindow快捷方式应用于无模式对话框,c++,qt,C++,Qt,我创建了一个无模式的Qt对话框,在其他控件中有一些单选按钮。对话框的父主窗口启用了左右箭头键的快捷方式 现在,我打开对话框,移动到带有tab键的单选按钮,并尝试使用左右箭头键更改选定的单选按钮。不幸的是,现在左右箭头键被传递到父窗口并执行快捷操作,而不是更改对话框中的单选按钮。这对我来说真是一种恼人的行为 我怎样才能避免这种行为?是否可以在对话框中阻止父对象的快捷方式。我更喜欢只在对话框代码而不是主窗口代码中应用的解决方案。 谢谢。我认为您的问题在于事件过滤。你应该检查一下 您可以重写此函数并

我创建了一个无模式的Qt对话框,在其他控件中有一些单选按钮。对话框的父主窗口启用了左右箭头键的快捷方式

现在,我打开对话框,移动到带有tab键的单选按钮,并尝试使用左右箭头键更改选定的单选按钮。不幸的是,现在左右箭头键被传递到父窗口并执行快捷操作,而不是更改对话框中的单选按钮。这对我来说真是一种恼人的行为

我怎样才能避免这种行为?是否可以在对话框中阻止父对象的快捷方式。我更喜欢只在对话框代码而不是主窗口代码中应用的解决方案。
谢谢。

我认为您的问题在于事件过滤。你应该检查一下

您可以重写此函数并执行一些操作。这当然是一个例子:

bool yourDialog::eventFilter(QObject *o, QEvent *e){

        if (event->type() == QEvent::KeyPress)
        {
          QKeyEvent* keyEvent = static_cast<QKeyEvent*>(event);
          if (keyEvent->key() == Qt::Key_Left)
          {
             //do some stuff
             return true;

          }
          else if(keyEvent->key() == Qt::Key_Right)
          {
            //do some stuff
            return true;
          }
        }
         return false;
}
boolYourDialog::eventFilter(QObject*o,QEvent*e){
如果(事件->类型()==QEvent::按键)
{
QKeyEvent*keyEvent=静态广播(事件);
if(keyEvent->key()==Qt::key\u Left)
{
//做点什么
返回true;
}
else if(keyEvent->key()==Qt::key\u Right)
{
//做点什么
返回true;
}
}
返回false;
}

实际上,我已经试过了。问题是在事件筛选器中,我没有为左/右箭头键获取
QEvent::ShortcutOverride
。这样如何:if(event->type()==QEvent::KeyPress){QKeyEvent*keyEvent=static_cast(event);if(keyEvent->key()==Qt::key_Up){//do some stuff}否则,如果(keyEvent->key()==Qt::key_Down){//做一些事情}}不,即使这样也不行。实际上,当箭头键被传递给父级时,我没有得到任何QEvent::ShortcutOverride、QEvent::Shortcut或QEvent::KeyPress!!!您是否使用了installEventFilter(此);对话框类的构造函数中的函数或DialogClass->installEventFilter(this)?在对话框的ctor中,我为每个单选按钮安装了事件过滤器,如
rb1->installEventFilter(this);rb2->installEventFilter(此)
等。