目录

常用设置函数

多个QAction的单选设置

​​​​​​​菜单相关类

​​​​​​​ 系统菜单的生成和响应

使用代码添加系统菜单

使用UI设计器设计系统菜单


使用Qt设计及界面时,常用的两种方式添加菜单,第一使用UI界面添加,第二种 在代码中添加菜单。

常用设置函数

action->setChecked(true);   // 设置为选中状态

​​​​​​​ 多个QAction的单选设置

void MainWindow::initUi()

{

    QActionGroup* toolGroup = new QActionGroup(this);

    toolGroup->addAction(this->ui->drawLine);

    toolGroup->addAction(this->ui->drawCircle);

    toolGroup->addAction(this->ui->drawEllipse);

    toolGroup->addAction(this->ui->selectTool);

    toolGroup->addAction(this->ui->fillPolygon);

    toolGroup->addAction(this->ui->fillFence);

    toolGroup->addAction(this->ui->drawPolygon);

    toolGroup->setExclusionPolicy(QActionGroup::ExclusionPolicy::ExclusiveOptional);

}

​​​​​​​菜单相关类

QMenuBar --菜单栏类,即下图中红色区域标记,菜单栏类给窗口提供水平菜单栏,此菜单栏占用窗口上方区域,垂直高度不变,水平宽度为窗口宽度,可随窗口大小变化而变化。如下图中“测试”,“test1”,"test2"所在的栏几位QMenuBar

QMenu --菜单项,即下图中绿色区域,下图中“测试”,"test1","test2"都是一个独立的菜单,包含各个子菜单。QMenu还可以用来创建弹出菜单

QAction --子菜单,即下图中蓝色区域标记的内容,一个子菜单对应一个操作。

​​​​​​​ 系统菜单的生成和响应

使用代码添加系统菜单

示例源码:

.h文件

#ifndef     MAINWINDOW_H

#define    MAINWINDOW_H

#include  <QMainWindow>

#include  <QMenuBar>

QT_BEGIN_NAMESPACE

namespace Ui { class MainWindow; }

QT_END_NAMESPACE

class  MainWindow : public QMainWindow

{

    Q_OBJECT

public:

    MainWindow(QWidget *parent = nullptr);

    ~MainWindow();

    //菜单栏

    QMenuBar *pMenuBar;

    //菜单项

    QMenu *pMenuTest;

    QMenu *pMenuTest1;

    QMenu *pMenuTest2;

    //子菜单

    QAction *pActionTest;

    QAction *pActionTest1;

    QAction *pActionTest2;

    QAction *pActionTest3;

    QAction *pActionTest4;

    QAction *pActionTest5;

    QAction *pActionTest6;

public slots:

    //菜单响应函数

    void OnActionTest();

    void OnActionTest1();

private:

    Ui::MainWindow *ui;

};

#endif             //MAINWINDOW_H

.cpp文件

#include "mainwindow.h"

#include "ui_mainwindow.h"

#include <QDialog>

//是否启用QMainWindow自带的菜单栏

//#define USE_DEFAULT_MENU_BAR

MainWindow::MainWindow(QWidget *parent)

    : QMainWindow(parent)

    , ui(new Ui::MainWindow)

{

    ui->setupUi(this);

    //指定菜单栏

#ifdef   USE_DEFAULT_MENU_BAR

    //添加菜单栏(此处添加为的为QMainWindow自带的菜单)

    pMenuBar = this->menuBar();

#else

    //添加自定义菜单

    pMenuBar = new QMenuBar(this);

#endif

    //定义菜单项

    //&n)代表快捷方式,当窗口获得焦点时按alt+n即可打开测试菜单项

    pMenuTest = new QMenu("测试(&n)",this);

    pMenuTest1 = new QMenu("test1",this);

    pMenuTest2 = new QMenu("test2",this);

    //定义子菜单

    //&s)为子菜单快捷键,当打开该菜单项后,按下‘s’键即可响应

    pActionTest = new QAction("测试(&s)",this);

    //新建一个带图标的菜单项,图标使用资源文件中的资源

    pActionTest1 = new QAction(QIcon(":/new/prefix1/resource/soccer_ball.ico"),"测试1",this);

    pActionTest2 = new QAction("测试2",this);

    pActionTest3 = new QAction("测试3(&Y)",this);

    pActionTest4 = new QAction("测试4",this);

    pActionTest5 = new QAction("测试5(&M)",this);

    pActionTest6 = new QAction("测试6",this);

    //将菜单项添加到子菜单

    pMenuTest->addAction(pActionTest);

    pMenuTest->addAction(pActionTest1);

    //在菜单项之间添加分割线

    pMenuTest->addSeparator();

    pMenuTest->addAction(pActionTest2);

    pMenuTest1->addAction(pActionTest3);

    pMenuTest1->addAction(pActionTest4);

    pMenuTest2->addAction(pActionTest5);

    pMenuTest2->addAction(pActionTest6);

    //将子菜单添加到菜单栏

    pMenuBar->addMenu(pMenuTest);

    pMenuBar->addMenu(pMenuTest1);

    pMenuBar->addMenu(pMenuTest2);

#ifndef    USE_DEFAULT_MENU_BAR

    //当不使用QMainWindow自带的菜单栏时,必须要加上此行

    setMenuBar(pMenuBar);

#endif

    //添加菜单响应函数

    connect(pActionTest,&QAction::triggered,this,&MainWindow::OnActionTest);

    connect(pActionTest1,&QAction::triggered,this,&MainWindow::OnActionTest);

}

//菜单响应函数

void MainWindow::OnActionTest()

{

    QDialog  dlg;

    dlg.setWindowTitle("测试菜单响应");

    dlg.exec();

}

void MainWindow::OnActionTest1()

{

    QDialog dlg;

    dlg.setWindowTitle("测试菜单响应");

    dlg.exec();

}

MainWindow::~MainWindow()

{

    delete ui;

}

上面的代码中定义了两种创建系统菜单的方式:调用QMainWindow自带的菜单栏和自己新建菜单栏,由第6行定义的宏控制,显示效果相同。

  第25行为“测试”子菜单添加快捷键,当窗口获得焦点时按alt+n可展开“测试”子菜单。

  第31行为“测试”子菜单“测试”菜单项添加快捷键,当“测试”子菜单弹出后按‘s’键,程序即可做出响应。

  第33行为“测试”子菜单的“测试2”菜单项添加了图标。

  第44行为“测试”子菜单的“测试2”和“测试3”之间添加了分割线。

使用UI设计器设计系统菜单

1、添加菜单项

直接输入菜单项名称,然后回车即可。

2、为菜单项设置图标

在动作编辑器上,右键选择编辑,然后添加图标

如果想在图标栏添加该菜单的快捷图标,直接将该动作项拖放只图标栏即可。

3、事件响应函数

我们的对象名称为:actionOpenFile,默认情况我们只需要添加槽函数:

public slots:

    void on_actionOpenFile_triggered();

当菜单被点击时,该事件将出发,槽函数命名规则为:on_对象名称_triggered,如果你觉得这个名字太长,可以自定义槽函数,然后通过connect进行连接:

connect(ui.actionOpenFile,  SIGNAL(triggered()), this, SLOT(OnActionOpenFile()));

进入“设计”页面,进入如下图所示的界面,具体操作方法见如下两张图,注意:输入菜单名称后一定要按“Enter”键才能生效。

注意: 子菜单可能无法输入中文,可在Action Editor 中修改文本与提示信息

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AIGC领域AI艺术,打造个性化艺术作品

AIGC领域AI艺术,打造个性化艺术作品 关键词:AIGC、AI艺术、生成对抗网络、个性化创作、深度学习、艺术风格迁移、创意计算 摘要:本文深入探讨了AIGC(人工智能生成内容)在艺术创作领域的应用,重点分析了如何利用AI技术打造个性化艺术作品。文章从技术原理出发,详细解析了生…

基于Flask+Jinja2的快捷教务系统(后端链接到新版正方教务系统)

快捷教务系统&#xff08;Easy Educational Administration Management System, EasyEAMS&#xff09; 项目简介 EasyEAMS 是一个基于 Flask Jinja2 的现代化教务系统 Web 应用。学生可通过网页端登录&#xff0c;在线查询个人信息、成绩、课表、学业生涯、通知、选课等。系…

EDM自动化与出海独立开发实用教程

随着互联网全球化发展&#xff0c;越来越多的独立开发者&#xff08;Indie Developer&#xff09;选择将自己的产品推向海外市场。如何高效地获客、激活用户、提升转化率&#xff0c;成为出海过程中必须解决的问题。EDM&#xff08;电子邮件营销&#xff09;自动化&#xff0c;…

「日拱一码」017 深度学习常用库——TensorFlow

目录 基础操作 张量操作&#xff1a; tf.constant 用于创建常量张量 tf.Variable 用于创建可训练的变量张量 tf.reshape 可改变张量的形状 tf.concat 可将多个张量沿指定维度拼接 tf.split 则可将张量沿指定维度分割 数学运算&#xff1a; tf.add 张量的加运算 tf.su…

ARM DStream仿真器脚本常用命令

以下是ARM DStream仿真器脚本中常用的命令及其功能分类&#xff0c;结合调试流程和典型应用场景整理&#xff1a; ⚙️ 一、连接与初始化命令 connect 建立与目标设备的连接&#xff0c;需指定接口类型&#xff08;如JTAG/SWD&#xff09;和处理器核心。 示例&#xff1a;conne…

vscode 调试unity

lanch.json { “version”: “0.2.0”, “configurations”: [ { “name”: “Attach to Unity”, “type”: “vstuc”, “request”: “attach” } ] }

金融IT入门知识点

银行金融IT核心知识点全解析&#xff1a;架构、技术与实践 一、金融IT的战略地位与行业特性 金融IT作为银行业务的核心支撑体系&#xff0c;其发展水平直接决定了银行服务的效率、安全性与创新能力。截至 2025年&#xff0c;中国银行业线上化业务占比已达97%&#xff0c;手机银…

C++——手撕智能指针、单例模式、线程池、String

智能指针今天我们来学习一下C中的智能指针&#xff0c;如果有人不知道C中的智能指针的概念的话&#xff1a;C智能指针是一种基于RAII&#xff08;Resource Acquisition Is Initialization&#xff0c;资源获取即初始化&#xff09;机制的高级内存管理工具&#xff0c;用于自动化…

Mybatis----留言板

基础项目&#xff1a;留言板 截止到目前为止&#xff0c;我们已经学习了 Spring&#xff08;只学习了DI&#xff09;、Spring MVC、SpringBoot、Mybatis 这些知识了&#xff0c;已经满足了做简单项目的基本要求了&#xff0c;所以接下来我们就从0到1实现表白墙项目。 需求分析…

Web-API-day3 DOM事件进阶

一、 事件流 1.事件冒泡 const fa document.querySelector(.father)const son document.querySelector(.son)document.addEventListener(click, function () {alert(我是爷爷)})fa.addEventListener(click, function () {alert(我是爸爸)})son.addEventListener(click, fun…

小波增强型KAN网络 + SHAP可解释性分析(Pytorch实现)

效果一览一、传统KAN网络的痛点与突破 1. 传统KAN的局限性 传统Kolmogorov-Arnold网络&#xff08;KAN&#xff09;虽在理论上有可靠的多变量函数逼近能力&#xff0c;但存在显著瓶颈&#xff1a; 计算效率低&#xff1a;训练速度慢于MLP&#xff0c;资源消耗大&#xff0c;尤其…

tomcat部署多个端口以及制定路径部署-vue3

vue3项目tomcat部署记录 使用hash路由 字符串拼接的图片地址可以使用import.meta.env.BASE_URL 默认8080 如果部署地址为8080/xc 则设置 vite.config.js中设置base为’/xc/’ outDir设置为xc 打包产物直接拖到webapps目录下 如果另开一个端口 如8081 设置根目录访问 conf/ser…

LeetCode三数之和-js题解

给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请你返回所有和为 0 且不重复的三元组。 注意&#xff1a;答案中不可以包含重复的三元组。 示例 1&…

Flink SQLServer CDC 环境配置与验证

一、SQL Server 数据库核心配置 1. 启用 CDC 功能&#xff08;Change Data Capture&#xff09; SQL Server CDC 依赖数据库级别的 CDC 功能及表级别的捕获配置&#xff0c;需按以下步骤启用&#xff1a; 启用数据库 CDC -- 以管理员身份连接数据库 USE master; GO-- 检查数…

软考(软件设计师)存储管理—设备管理,磁盘调度

I/O软件的核心目标是管理硬件差异、提供统一接口、实现高效可靠的数据传输。 核心目标&#xff1a; 设备无关性&#xff1a; 应用程序无需关心具体硬件细节。错误处理&#xff1a; 处理硬件错误和传输异常。同步/异步传输&#xff1a; 支持阻塞&#xff08;等待完成&#xff09…

[C语言] C语言数学函数库概览

C语言数学函数库概览 文章目录 C语言数学函数库概览一、概述二、基本数学函数详解1. 平方根函数 sqrt(x)2. 幂函数 pow(x, y)3. 绝对值函数 fabs(x)4. 向上取整函数 ceil(x)5. 向下取整函数 floor(x) 三、三角函数与双曲函数详解1. 正弦函数 double sin(double x)2. 余弦函数 d…

【简单三步】Stable diffusion Webai本地部署无法加载模型并报openai/clip-vit-large-patch14错误的解决方法

问题描述 Stable diffusion Webai本地部署成功后&#xff0c;手动加载本地模型checkpoint时&#xff0c;始终无法加载进去&#xff0c;确定模型存放位置无误&#xff08;位于models\Stable-diffusion&#xff09;查看cmd窗口时&#xff0c;发现一个报错提示&#xff1a;Can’t …

Java 命令行参数详解:系统属性、JVM 选项与应用配置

Java 命令行参数详解&#xff1a;系统属性、JVM 选项与应用配置 在 Java 应用启动命令中&#xff0c;如&#xff1a; java -jar -Dserver.port8088 xdr-demo-1.0-SNAPSHOT-assembly.jar &-Dserver.port8088是一个 系统属性&#xff08;System Property&#xff09; 设置。…

【论文笔记】World Models for Autonomous Driving: An Initial Survey

原文链接&#xff1a;https://ieeexplore.ieee.org/abstract/document/10522953 1. 世界模型的发展 A. 世界模型的结构基础 世界模型包含4个关键组件&#xff0c;以模拟人类连贯的思考和决策过程。 a&#xff09;感知模块使用如变分自编码器&#xff08;VAE&#xff09;、掩…

Spring Cloud Config(微服务配置中心详解)

关键词&#xff1a;Spring Cloud Config、配置中心、远程仓库、动态刷新、加密解密 ✅ 摘要 在微服务架构中&#xff0c;随着服务数量的增加&#xff0c;统一管理各服务的配置信息变得尤为重要。传统的本地配置文件方式难以满足多环境、多实例、集中化的需求。 Spring Cloud …