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

     2023-02-22     9

关键词:

【中文标题】如何禁用 Qt Mainwindow 快捷方式适用于无模式对话框【英文标题】:How to disable Qt Mainwindow shortcut applies to the modeless dialog 【发布时间】:2016-02-29 06:33:18 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

我认为您的问题与事件过滤有关。你应该检查一下

http://doc.qt.io/qt-5/eventsandfilters.html

你可以覆盖这个函数并做一些事情。这当然是一个例子:

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;

【讨论】:

其实这个我已经试过了。问题是我在事件过滤器中没有得到QEvent::ShortcutOverride 左/右箭头键。 这个怎么样: if (event->type() == QEvent::KeyPress) QKeyEvent* keyEvent = static_cast(event); if (keyEvent->key() == Qt::Key_Up) // 做一些事情 else if(keyEvent->key() == Qt::Key_Down) // 做一些事情 不,即使这样也行不通。实际上,当箭头键传递给父级时,我没有得到任何 QEvent::ShortcutOverride、QEvent::Shortcut 或 QEvent::KeyPress !!! 你使用了 installEventFilter(this);对话框类或 yourDialogClass->installEventFilter(this) 的构造函数中的函数; ? 在我的对话框的 ctor 中,我为每个单选按钮安装了事件过滤器,例如 rb1-&gt;installEventFilter(this); rb2-&gt;installEventFilter(this) 等。

如何在 Flutter Web 中禁用默认浏览器快捷方式?

】如何在FlutterWeb中禁用默认浏览器快捷方式?【英文标题】:HowdoIdisableDefaultBrowserShortcutsinFlutterWeb?【发布时间】:2021-07-0610:01:04【问题描述】:问题如果我在FlutterWeb应用程序中实现CTRL++和CTRL+-的快捷方式,浏览器仍会默认缩放... 查看详情

如何避免 Qt 快捷方式歧义(尤其是当快捷方式有不同的上下文时)?

】如何避免Qt快捷方式歧义(尤其是当快捷方式有不同的上下文时)?【英文标题】:HowtoavoidQtshortcutambiguity(especiallywhentheshortcutshavedifferentcontexts)?【发布时间】:2011-04-0122:15:00【问题描述】:我有一个应用程序,它具有Ctrl+S作为... 查看详情

关于如何使用指向 MainWindow 的指针的 QT 问题

】关于如何使用指向MainWindow的指针的QT问题【英文标题】:QTquestionabouthowtouseapointertoMainWindow【发布时间】:2020-06-2708:48:34【问题描述】:我知道如何使用指向Widget的指针,例如Widget*fatherPtr=(Widget*)parentWidget();。但在MainWindow中,... 查看详情

如何禁用故事书的键盘快捷键

】如何禁用故事书的键盘快捷键【英文标题】:Howtodisablestorybook\'skeyboardshortcuts【发布时间】:2021-04-0120:13:09【问题描述】:我正在将storybook6.0.25用于我的vue项目文档之一,其中我在小于和大于键盘按钮的记录之间切换。但是当... 查看详情

QT Creator中[main]和[mainwindow]的区别

】QTCreator中[main]和[mainwindow]的区别【英文标题】:Thedifferencebetween[main]and[mainwindow]inQTCreator【发布时间】:2015-06-1800:53:00【问题描述】:我已经学习QT一个月了。我有点明白了,但有一件事让我感到困惑,那就是我编写代码的地方... 查看详情

如何使用 Qt 在 MainWindow 中显示 QForm?

】如何使用Qt在MainWindow中显示QForm?【英文标题】:HowtodisplayaQForminsidetheMainWindowwithQt?【发布时间】:2013-01-0723:22:18【问题描述】:我正在尝试在Qt中编写一个树浏览器GUI。在左侧,我有一个由Qt组件QTreeView处理的树视图系统,但... 查看详情

如何将多个 QShortcuts 连接到 Qt 中的一个插槽?并找出插槽内是哪个快捷方式发出的?

】如何将多个QShortcuts连接到Qt中的一个插槽?并找出插槽内是哪个快捷方式发出的?【英文标题】:HowtoconnectmultipleQShortcutstooneslotinQt?Andfindoutinsidetheslotwhichshortcutemittedit?【发布时间】:2012-02-2102:22:34【问题描述】:可以传参数吗... 查看详情

Qt override widget 快捷方式(窗口快捷方式)

】Qtoverridewidget快捷方式(窗口快捷方式)【英文标题】:Qtoverridewidgetshortcut(windowshortcut)【发布时间】:2017-07-0422:50:30【问题描述】:我有一个Qt应用程序,在QtDesigner表单操作中定义了多个窗口快捷方式。在焦点位于处理相同组... 查看详情

如何更改 Qt MainWindow 的不透明度?

】如何更改QtMainWindow的不透明度?【英文标题】:HowtochangetheopacityofQtMainWindow?【发布时间】:2015-06-1700:44:26【问题描述】:如何通过一些值改变QtMainWindow的不透明度?我的主窗口什么都没有,只是我需要使用击键来更改不透明度... 查看详情

如何在 QT 中加载 UI 表单?

...3-3016:30:50【问题描述】:在我的项目中,我有2个ui文件(mainwindow.ui、myform.ui)、2个源文件(main.cpp、mainwindow.cpp)和1个头文件(mainwindow.h)。mainwindow和myform是简单的窗口。主窗口有一个按钮。单击mywindow.HOW中的按钮时,我 查看详情

Qt如何更改mainWindow中每个滚动区域的widgetContents-widget的样式表?

】Qt如何更改mainWindow中每个滚动区域的widgetContents-widget的样式表?【英文标题】:QtHowtochangestylesheetofthewidgetContents-widgetofeveryscrollareainmainWindow?【发布时间】:2017-11-0115:46:38【问题描述】:在Qt中,我不能只设置QScrollArea的样式(... 查看详情

qt:子窗口中如何获取主窗体ui中的控件

在自定义的imageWidget中获取MainWindow的widget?如:pen.setWidth(spinbox->value());不建议通过这种方式,这样会破坏类的封装性!建议在主窗口中定义接口函数,在接口函数中可以访问主窗口的任何控件。然后在子窗口中parentWidget()取得... 查看详情

在 Qt Creator 中应用代码更改的快捷方式是啥?

...时,我可以使用Alt+F10更改代码,而无需重新构建程序。如何在QtCreator中做到这一点?【问题讨论】:【参考 查看详情

来自 Qt 中 main.cpp 代码的 MainWindow

】来自Qt中main.cpp代码的MainWindow【英文标题】:MainWindowfromcodefromthemain.cppinQt【发布时间】:2016-09-2215:47:48【问题描述】:想了解MainWindow和main.cpp之间的代码区别。具体来说,专门编写在main.cpp中的代码块需要如何修改为mainwindow.cp... 查看详情

如何设置我的 mainWindow 的 sizePolicy?

】如何设置我的mainWindow的sizePolicy?【英文标题】:HowcanIsetthesizePolicyofmymainWindow?【发布时间】:2019-11-3017:21:19【问题描述】:我在qt设计器的帮助下制作了一个简单的mainWindow,并使用cmd中的pyuic5选项获得了整个代码。我在主要... 查看详情

我在qt主控件mainwindow里我加了一个widget控件,我用qpainter只能在mainwindow里画直线,如何画在widget

...白你的问题如果是widget画的话,重写paintEvent就行了追问mainwindow上的一个widget,我如何在widget上画直线?现在我能够实现的仅仅可以在mainwindow上画图。谢谢 查看详情

qt创建桌面快捷方式(代码片段)

windows下的快捷方式和开始菜单创建代码如下://建立桌面快捷方式QStringstrAppPath="C:/Windows/System32/notepad.exe";QStringstrDesktopLink=QStandardPaths::writableLocation(QStandardPaths::DesktopLocation)+"/";strDesktopLink+="note 查看详情

qt创建快捷方式

1、当我第一次安装完QT后发现它并没有在桌面上给我创建快捷方式,使用起来很难受啊,于是寻找办法,终于找到一个懒办法:首先进入到上图的BIN目录下找到qtcreator文件,双击运行,然后系统就会在左侧菜单栏生成qt图标:然... 查看详情