#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
。在菜单中插入操作时,快捷方式效果很好。我做错了什么?
答案 0 :(得分:4)
QAction
处于休眠状态,直到您将其插入某处。正如vahancho建议的那样,使用QShortcut
。您需要为要使其处于活动状态的每个顶级窗口小部件(窗口)实例化快捷方式。因此,如果您有5个顶级窗口,则需要5个快捷方式,每个快捷方式都有一个窗口作为其父级。
如果没有gui,就无法使用QShortcut
作为全局快捷方式。 QShortcut
仅在其关联的窗口小部件具有焦点时才处于活动状态。小部件可以是顶级窗口。
系统全局快捷方式是this question的主题。