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

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);
//当QKeySequence中没有相应的快捷键时,可以自定义,如下:
newAct->setShortcuts(QKeySequence("Ctrl+N"))

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

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

2.1 测试

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

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

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

在这里插入图片描述

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_OBJECT

public:
    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,就可以触发新建项目。
在这里插入图片描述

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_OBJECT

public:
    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);  //设置快捷键
    //actionNew->setShortcut(QKeySequence("Ctrl+N"));  //设置快捷键的第二种写法
    actionOpen = new QAction(QStringLiteral("打开项目(&O)"), this);
    actionOpen->setShortcut(QKeySequence::Open);
    //actionOpen->setShortcut(QKeySequence("Ctrl+O"));
    actionSave = new QAction(QStringLiteral("保存项目(&S)"), this);
    actionSave->setShortcut(QKeySequence::Save);
    //actionSave->setShortcut(QKeySequence("Ctrl+S"));
    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);
}

//打开项目和保存项目的槽没写,可以自己写
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Qt,可以使用信号和槽机制来更新菜单或工具栏状态。一般情况下,菜单或工具栏的状态与当前应用程序的状态相关联,例如某个操作是否可用、是否处于选状态等等。 举个例子,假设我们有一个MainWindow类,其包含一个QAction对象,用于执行某个操作。我们可以在MainWindow定义一个槽函数,用于更新这个QAction对象的状态: ```c++ class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr); private slots: void updateActionState(); private: QAction *m_action; }; MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { m_action = new QAction("Action", this); connect(m_action, &QAction::triggered, this, &MainWindow::updateActionState); updateActionState(); } void MainWindow::updateActionState() { // 根据当前应用程序的状态更新m_action对象的状态 bool isEnabled = ...; // 根据应用程序状态计算m_action是否可用 bool isChecked = ...; // 根据应用程序状态计算m_action是否处于选状态 m_action->setEnabled(isEnabled); m_action->setChecked(isChecked); } ``` 在上面的例子,我们定义了一个updateActionState()槽函数,用于更新m_action对象的状态。在MainWindow的构造函数,我们将m_action对象的triggered信号连接到updateActionState()槽函数,这样当用户触发m_action时,它的状态就会被更新。在MainWindow的构造函数,我们还调用了updateActionState()函数,以确保m_action对象的初始状态是正确的。 当应用程序的状态发生变化时,我们只需要调用updateActionState()函数就可以更新m_action对象的状态。例如,如果应用程序的某个数据发生了变化,我们可以在数据变化的处理函数调用updateActionState()函数,以更新m_action对象的状态。 除了QAction对象,Qt的菜单和工具栏还可以包含其他类型的控件,例如QCheckBox、QRadioButton等。对于这些控件,更新它们的状态的方法与上面的例子类似,只需要在相应的槽函数更新它们的状态即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值