使用快捷键创建QAction,而无需将其插入菜单

7
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
#include <cassert>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QAction* back = new QAction(this);
    back->setVisible(true);
    back->setShortcut(QKeySequence("Ctrl+M"));
    bool cres = connect(back, SIGNAL(triggered(bool)), this, SLOT(mySlot()));
    assert(cres);
}

在这段代码中,我尝试捕捉Ctrl+M键事件。 我不想将动作放在菜单中。connect返回true,但是mySlot从未被调用过。当动作被插入到菜单中时,快捷方式可以正常工作。我做错了什么?

2
如果您想使用“无界面”(无GUI)快捷方式,我建议直接使用QShortcut类。 - vahancho
@vahancho:QShortcut没有GUI就无法工作。根据文档:“当快捷键的父窗口小部件正在接收事件时,Qt的事件循环会“侦听”快捷键。” - Kuba hasn't forgotten Monica
@KubaOber,是的,但我的意思是QShortcut没有可视化表示,就像QAction可能有的那样。 - vahancho
1个回答

7

QAction只有在插入到某个位置后才会被激活。正如vahancho所建议的,使用QShortcut。您需要为每个顶层窗口实例化快捷键,以使其生效。因此,如果您有5个顶级窗口,则需要5个快捷键,每个快捷键都将一个窗口作为其父级。

没有办法在没有GUI的情况下使用QShortcut作为全局快捷键。只有当关联的窗口具有焦点时,QShortcut才会处于活动状态。该窗口可以是顶层窗口。

系统全局快捷键是这个问题的主题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接