> 文章列表 > 【QT】MainWindow中如何为菜单栏或工具栏中的Menu或Action设置快捷键

【QT】MainWindow中如何为菜单栏或工具栏中的Menu或Action设置快捷键

【QT】MainWindow中如何为菜单栏或工具栏中的Menu或Action设置快捷键

目录

  • 1. 设置快捷键的两种方法
    • 1.1 在控件title属性的某个字母前加上&,(Alt+该字母)作为快捷键
    • 1.2 使用 setShortcuts,(Ctrl+字母)作为快捷键
  • 2. 为菜单栏中的 menu 设置快捷键
    • 2.1 测试
    • 2.2 代码
  • 3. 为菜单栏或工具栏中的Action设置快捷键
    • 3.1 测试
    • 3.2 代码

1. 设置快捷键的两种方法

1.1 在控件title属性的某个字母前加上&,(Alt+该字母)作为快捷键

explicit QMenu(const QString &text, QWidget *parent = Q_NULLPTR);explicit QAction(const QString &text, QObject *parent = nullptr);

在为QMenu或Action设置text时,在text中的某个字母前加上&,在界面显示时你会发现:显示的text中没有&这个符号,只会显示text。这是因为在text中某个字母前加上&的作用是设置快捷键,当你按下Alt键时,其相应的text中&符号后面的字母会显示下划线,快捷键的使用方法是 Alt+&后的那个字母。例如:“&New”,快捷键就是Alt + N;“Save &As”,快捷键就是Alt + A。

QAction* newAct = new QAction(tr("&New"), this);  //加在N前的&表示一种快捷键的方式,先按住Alt键,再按n键就会触发这个Action。类似于Ctrl+N的快捷键
QAction* saveAsAct = new QAction(tr("Save &As..."), this);  //在A前加上&符号表示一种快捷键(Ctrl+a)的方式,加在哪个字母前就表示使用哪个字母作为快捷键

1.2 使用 setShortcuts,(Ctrl+字母)作为快捷键

QAction* newAct = new QAction(tr("New"), this);
newAct->setShortcuts(QKeySequence::New);

两种快捷键的使用方法不同:一个是使用Alt,一个是使用Ctrl

2. 为菜单栏中的 menu 设置快捷键

2.1 测试

在设置菜单的title时,在字母前加&符号,例如:

menu = new QMenu(QStringLiteral("项目(&p)"));

按下Alt键时,其p下面会有下划线,表示是有快捷键的,快捷键为P。

【QT】MainWindow中如何为菜单栏或工具栏中的Menu或Action设置快捷键

2.2 代码

MainWindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QAction>
#include <QMainWindow>
#include <QMenu>namespace Ui {class MainWindow;
}class MainWindow : public QMainWindow {Q_OBJECTpublic:explicit MainWindow(QWidget* parent = 0);~MainWindow();private:Ui::MainWindow* ui;QMenu* menu;QAction* actionNew;QAction* actionOpen;QAction* actionSave;
};#endif  // MAINWINDOW_H

MainWindow.cpp

#include "mainwindow.h"#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent), ui(new Ui::MainWindow) {ui->setupUi(this);menu = new QMenu(QStringLiteral("项目(&p)"));ui->menuBar->addMenu(menu);QList<QAction*> actionList;actionNew = new QAction(QStringLiteral("新建项目"));actionOpen = new QAction(QStringLiteral("打开项目"));actionSave = new QAction(QStringLiteral("保存项目"));actionList.append(actionNew);actionList.append(actionOpen);actionList.append(actionSave);menu->addActions(actionList);
}MainWindow::~MainWindow() { delete ui; }

3. 为菜单栏或工具栏中的Action设置快捷键

3.1 测试

在为Action设置快捷键时有两种方法,& 和 setShortcuts 都可以使用。
在使用setShortcuts时,其action的后面会显示快捷键。
第一种:先按住Alt,再按P,其显示的N会有下划线,再按N就会触发新建项目。
第二种:直接按Ctrl+N,就可以触发新建项目。
【QT】MainWindow中如何为菜单栏或工具栏中的Menu或Action设置快捷键

3.2 代码

MainWindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QAction>
#include <QDialog>
#include <QMainWindow>
#include <QMenu>namespace Ui {class MainWindow;
}class MainWindow : public QMainWindow {Q_OBJECTpublic:explicit MainWindow(QWidget* parent = 0);~MainWindow();private slots:void slotActionNewTrigger();private:Ui::MainWindow* ui;QWidget* widget;QMenu* menu;QAction* actionNew;QAction* actionOpen;QAction* actionSave;
};#endif  // MAINWINDOW_H

MainWindow.cpp

#include "mainwindow.h"#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent), ui(new Ui::MainWindow) {ui->setupUi(this);widget = centralWidget();menu = new QMenu(QStringLiteral("项目(&p)"));ui->menuBar->addMenu(menu);QList<QAction*> actionList;actionNew = new QAction(QStringLiteral("新建项目(&N)"), this);actionNew->setShortcut(QKeySequence::New);  //设置快捷键actionOpen = new QAction(QStringLiteral("打开项目(&O)"), this);actionOpen->setShortcut(QKeySequence::Open);actionSave = new QAction(QStringLiteral("保存项目(&S)"), this);actionSave->setShortcut(QKeySequence::Save);actionList.append(actionNew);actionList.append(actionOpen);actionList.append(actionSave);menu->addActions(actionList);connect(actionNew, &QAction::triggered, this, &MainWindow::slotActionNewTrigger);
}MainWindow::~MainWindow() { delete ui; }void MainWindow::slotActionNewTrigger() {QDialog* dialog = new QDialog(this);dialog->resize(300, 200);dialog->setWindowTitle(tr("新建项目"));dialog->setVisible(true);
}//打开项目和保存项目的槽没写,可以自己写