使用快捷方式创建QAction,无需插入菜单

时间:2014-01-31 16:51:56

标签: c++ qt bind qaction

#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。在菜单中插入操作时,快捷方式效果很好。我做错了什么?

1 个答案:

答案 0 :(得分:4)

QAction处于休眠状态,直到您将其插入某处。正如vahancho建议的那样,使用QShortcut。您需要为要使其处于活动状态的每个顶级窗口小部件(窗口)实例化快捷方式。因此,如果您有5个顶级窗口,则需要5个快捷方式,每个快捷方式都有一个窗口作为其父级。

如果没有gui,就无法使用QShortcut作为全局快捷方式。 QShortcut仅在其关联的窗口小部件具有焦点时才处于活动状态。小部件可以是顶级窗口。

系统全局快捷方式是this question的主题。