【问题标题】:C++ Qt Action in menu not triggered by keyboard shortcut when menu open菜单打开时键盘快捷键未触发菜单中的 C++ Qt 操作
【发布时间】:2017-04-26 06:00:18
【问题描述】:

我正在 Linux 上构建 Qt 应用程序。我在主窗口中有一个菜单栏,里面有两个菜单,每个菜单都有几个操作,所有这些都有与之关联的键盘快捷键。键盘快捷键在菜单未打开时起作用,但当其中一个菜单打开时,它们都不起作用。

在使用 [menuobject]->addAction 将操作添加到各自的菜单之前,使用 setShortcut 将快捷方式添加到操作。所有动作都以主窗口为父窗口。在阅读QAction shortcut doesnt always work 之后,我添加了对 addAction 的调用,将操作添加到主窗口。这并没有解决问题。

其中一个菜单项的代码示例:

//In the main window constructor
gameQuit = new QAction(QString(tr("&Quit\tCtrl+Q")), this);
gameQuit->setShortcut(QKeySequence(Qt::Key_Q | Qt::CTRL));
addAction(gameQuit);

connect(gameQuit, SIGNAL(triggered()), this, SLOT(close()));

gameMenu = menuBar()->addMenu(QString(tr("&Game")));
gameMenu->addAction(gameQuit);

在我假设是用 Qt 编写的 QtCreator 中,菜单项的键盘快捷键在菜单打开时确实有效,所以我认为必须有办法。

感谢您的帮助。

【问题讨论】:

  • 为什么这被否决了?
  • 我猜这是因为你没有提供一个最小的例子。在 StackOverflow 上,大多数问题都需要一个小代码示例来显示问题并且其他人可以尝试。
  • @drescherjm 嗯...在 prepost 指南中没有看到。我会牢记在心,以备不时之需。谢谢。

标签: c++ qt keyboard-shortcuts


【解决方案1】:

从被引用帖子的 cmets 中获得一些建议(该帖子已被斥责,这就是我最初没有尝试的原因),我使用 [actionobject]->setShortcutContext() 修改了快捷方式上下文。显然默认值在我的场景中不起作用。

我首先尝试设置为 Qt::WindowShortcut,但没有成功。 Qt::ApplicationShortcut 确实有效,但是,如引用帖子的 cmets 中所述,这可能存在缺点。不过,它们对我的这个特殊应用并不重要,所以我将发布并接受这个作为答案。

校正码示例:

//In the constructor of the main window, after creation of the action and 
//setting of the shortcut
gameQuit->setShortcutContext(Qt::ApplicationShortcut);

【讨论】:

    猜你喜欢
    • 2013-01-24
    • 2015-07-09
    • 1970-01-01
    • 1970-01-01
    • 2014-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多