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

news2024/11/26 18:37:12

目录

  • 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。

在这里插入图片描述

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);  //设置快捷键
    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);
}

//打开项目和保存项目的槽没写,可以自己写

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/423877.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

百兆以太网使用的电信号编码分析

以太网是一种计算机局域网的组网技术。在IEEE制定的IEEE 802.3标准给出了以太网的技术标准。它规定了包括物理层的连线、电信号和介质访问层协议的内容。以太网是当前应用普遍的局域网技术。它很大程度上取代了其他局域网标准&#xff0c;如令牌环、FDDI和ARCNET。 我们常见的网…

Netty通信技术进阶一

Netty通信技术进阶1. 概念2. 线程同步、异步3. 其他通信技术对比4. Netty中的Reactor实现5. Pipeline 和 Handler5.1 ChannelHandler 分类6. 入站事件传播7.inbound/outbound 加载顺序和执行顺序8. 出站事件传播9. Code example9.1 编写服务端9.2 编写客户端10. 核心组件10.1 B…

虚拟直播需要哪些设备?如何搭建虚拟直播团队?

虚拟直播不止是新兴的娱乐途径 &#xff0c;还是新的商业模式 。虚拟直播的出现&#xff0c;是互联网娱乐趋势的变化&#xff0c;带来了更加丰富多彩的娱乐形式&#xff0c;同时也优化了传统直播模式下的人力物力成本&#xff0c;使直播行业更加效率及智能。 科技不断发展&…

JDBC(数据库连接)

MYSQL 数据库总结&#xff1a; http://t.csdn.cn/Ka9Vm JDBC是使用Java语言操作关系型数据库的一套API。 将mysql-connector-j-8.0.32jar复制粘贴到一个新建的目录里&#xff0c;然后右键mysql-connector-j-8.0.32jar&#xff0c;添加为库。 DriverManager 一个工厂类&…

2023易派客工业品展览会在苏州开幕

展厅面积达5.3万平方米&#xff0c;500多家重要工业领军企业参展&#xff0c;20组企业签署购销意向协议&#xff0c;签约金额超82亿元 ​ 4月13日&#xff0c;“2023易派客工业品展览会”在苏州国际博览中心开幕。展会以“绿色智造融通赋能”为主题&#xff0c;500多家重要工业…

CART分类树算法

1. CART分类树算法的最优特征选择方法 我们知道&#xff0c;在ID3算法中我们使用了信息增益来选择特征&#xff0c;信息增益大的优先选择。在C4.5算法中&#xff0c;采用了信息增益比来选择特征&#xff0c;以减少信息增益容易选择特征值多的特征的问题。但是无论是ID3还是C4.…

FreeRTOS中临界段的保护(笔记)

目录临界段的定义Cortex-M内核快速关开关中断的指令关中断开中断进入临界段的宏退出临界段的宏进入临界段&#xff0c;不带中断保护&#xff0c; 不能嵌套进入临界段&#xff0c;带中断保护版本&#xff0c;可以嵌套退出临界段&#xff0c;不带中断保护版本&#xff0c;不能嵌套…

【数据结构与算法】堆的实现(附源码)

目录 一.堆的概念及结构 二.接口实现 A.初始化 Heapinit 销毁 Heapdestroy B.插入 Heappush 向上调整 AdjustUp 1.Heappush 2.AdjustUp C.删除 Heappop 向下调整 AdjustDown D.堆的判空 Heapempty 堆顶数据 Heaptop 堆的大小 Heapsize 三.源码 Heap.h He…

Windows通过RDP异地远程桌面Ubuntu【内网穿透】

文章目录前言1. ubuntu安装XRDP2.局域网测试连接3. Ubuntu安装cpolar内网穿透4.cpolar公网地址测试访问5.固定域名公网地址前言 XRDP是一种开源工具&#xff0c;它允许用户通过Windows RDP访问Linux远程桌面。 除了Windows RDP外&#xff0c;xrdp工具还接受来自其他RDP客户端(…

文心一格,百度AI作画产品

文章目录AIGC什么是AI作画&#xff1f;Prompt文心一格使用方法注册账号使用AI绘图AIGC的未来发展结语AIGC AIGC&#xff08;AI Generated Content&#xff09;是指利用人工智能生成内容。是利用人工智能来生成你所需要的内容&#xff0c;GC的意思是创作内容。与之相对应的概念中…

ElasticSearch索引文档写入和近实时搜索

一、基本概念 1.Segments In Lucene 众所周知&#xff0c;ElasticSearch存储的基本单元Shard&#xff0c;ES中一个Index可能分为多个Shard&#xff0c;事实上每个Shard都是一个Lucence的Index&#xff0c;并且每个Lucene Index由多个Segment组成&#xff0c;每个Segment事实上…

【JS运算】分组求和/平均值(reduce函数)

对于数组求和的问题&#xff0c;使用reduce函数能够最快的解决 如果你还不会reduce函数&#xff0c;可以看这一篇&#xff1a; reduce函数的使用 思路 reduce函数对相同group的值进行迭代求和 将分组的总和除以组里的个数得到平均值&#xff0c;然后存储起来 Sum函数&#x…

Linux ubuntu更新meson版本

问题描述 在对项目源码用meson进行编译时&#xff0c;可能出现以下错误 meson.build:1:0: ERROR: Meson version is 0.45.1 but project requires > 0.58.0. 或者 meson_options.txt:1:0: ERROR: Unknown type feature. 等等&#xff0c;原因是meson版本跟设置的不适配。 …

Linux 学习总结(92)—— Linux 高效率使用技巧

1、跳转目录优雅顺滑 1.1 bd 命令 快速回到 Bash 中的特定父目录&#xff0c;而不是多余地键入 cd ../../..。如果在此路径中/home/radia/work/python/tkinter/one/two并且想快速转到目录 python&#xff0c;只需键入: bd python或者仅输入目录的前几个字母&#xff0c;如匹…

锁子甲 bulid+sim

链接: youtube 分析&#xff1a;洒一堆点——copy 模型——点和模型符合一定规律 点和点的距离符合上述图中的关系 &#xff08;横纵&#xff09; 横向 但是我们要横向10个点够了&#xff1a; 用modulo 除余 纵向 这里用除法向上取整 /10 eg &#xff1a; 0-9 得0 10-19 得1…

【逗号你真的懂吗?】C++与JAVA中逗号的区别

文章目录一、先上结论二、C中的逗号逗号运算符和逗号表达式三、JAVA中的逗号四、实战验证情况一&#xff1a;在定义&#xff08;或声明&#xff09;变量时利用逗号CJAVA情况二&#xff1a;在for循环条件中使用逗号CJAVA情况三&#xff1a;在函数形参参数列表中使用逗号CJAVA情况…

WPF_Application

文章目录Application1 Application类1.1 定义1.2 示例1.3 附注2 Application常用属性2.1 Current2.2 Dispatcher3 总结Application 1 Application类 1.1 定义 该类封装了一个WPF应用程序。 该类派生自DispatcherObject&#xff0c;实现了IQueryAmbient接口。 1.2 示例 以…

ICLR Spotlight | 卷积网络上的首个BERT/MAE预训练,ResNet也能用

“删除-再恢复” 形式的自监督预训练可追溯到 2016 年&#xff0c;早于 18 年的 BERT 与 21 年的 MAE。然而在长久的探索中&#xff0c;这种 BERT/MAE 式的预训练算法仍未在卷积模型上成功&#xff08;即大幅超过有监督学习&#xff09;。本篇 ICLR Spotlight 工作 “Designing…

PPP协议相关的知识

这只是我自己在学习时的总结&#xff0c;对于我有用的知识点&#xff0c;希望可以和大家分享&#xff0c;主要学习的文章如下&#xff0c;如有兴趣也可以去了解一下其他作者写的ppp协议的知识点。 PPP协议详解https://blog.csdn.net/m0_49864110/article/details/124987932?o…

Spring Boot 之四:使用Feign实现微服务间的交互

系列目录&#xff08;持续更新。。。&#xff09; Spring Cloud&#xff1a;什么是微服务 Spring Cloud之一&#xff1a;注册与发现-Eureka工程的创建 Spring Cloud之二&#xff1a;服务提供者注册到Eureka Server Spring Cloud之三&#xff1a;Eureka Server添加认证 Spr…