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

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

最佳答案

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

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

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

关于c++ - 使用快捷方式创建 QAction,无需插入菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21485558/

相关文章:

c++ - QString::split() 和 "\r"、 "\n"和 "\r\n"约定

c++ - 在 Windows 的 GUI 应用程序中使用控制台,仅当它从控制台运行时

c++ - 使用 OpenCV 导出颜色校正矩阵

c++ - Lambda:未评估上下文中未捕获的对象

Qt - 如何更改 QLineEdit 中占位符的方向?

c++ - 成员函数回调的绑定(bind)或 Lambda c++14

android - 如何正确解绑服务

jquery - 使用 jQuery 将函数惰性绑定(bind)到多个事件

qt - 使用 QT 开发 meego 和 symbian 应用程序

c++ - 如果 Excel.Application 不可见,activeQt 无法打开 *.xls