#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
从未被调用。在菜单中插入操作时,快捷方式效果很好。我做错了什么?
最佳答案
QAction
处于休眠状态,直到您将它插入某个地方。正如 vahancho 所建议的那样,使用 QShortcut
。您需要为每个您希望它处于事件状态的顶级小部件(窗口)实例化快捷方式。因此,如果您有 5 个顶层窗口,则需要 5 个快捷方式,每个快捷方式都将其中一个窗口作为其父窗口。
如果没有 gui,就无法将 QShortcut
用作全局快捷方式。 QShortcut
仅在其关联的小部件具有焦点时才处于事件状态。该小部件可以是顶级窗口。
系统全局快捷方式是 this question 的主题.
关于c++ - 使用快捷方式创建 QAction,无需插入菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21485558/