菜单打开时菜单中的C ++ Qt动作不是由键盘快捷键触发的

时间:2016-12-11 03:40:04

标签: c++ qt keyboard-shortcuts

我正在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);

在QtCreator中,我假设是用Qt编写的,当菜单打开时,菜单项的键盘快捷键可以正常工作,所以我认为必须有办法。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

从引用帖子的评论中得到一些建议(这是我最初没有尝试过的原因),我使用[actionobject] - > setShortcutContext()修改了快捷方式上下文。显然,默认情况在我的方案中不起作用。

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

更正码的示例:

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