Qt 6之五:创建菜单

Qt 6之五:创建菜单

Qt是一种跨平台的C++应用程序开发框架,它提供了一套丰富的工具和库,可以帮助开发者快速构建跨平台的应用程序,用于开发图形用户界面(GUI)和非GUI应用程序。

Qt 6之一:简介、安装与简单使用 https://blog.csdn.net/cnds123/article/details/130730203

Qt 6之二:项目的结构、资源文件的使用https://blog.csdn.net/cnds123/article/details/130741807

Qt 6之三: 项目的发布 https://blog.csdn.net/cnds123/article/details/130827966

Qt 6之四:基础概念讲解https://blog.csdn.net/cnds123/article/details/135401606

创建简单菜单程序

Qt 6,如何用Qt Creator 10创建菜单程序

现在,有两种方式设计菜单:

通过代码实现菜单的方式

通过户界面设计器设计菜单

下面以这个如下图简单的示例分别讲解两种实现方式:

一)通过代码实现菜单的方式

先创建新项目ch03,打开 Qt Creator 10,点击 “File” -> “New File or Project”。

在 “New Project” 对话框中,选择 “Qt Widgets Application”,然后点击 “Choose”。然后按照向导提示创建新项目(我这里,初项目名设置为ch03,其他向导按默认),参见下图:

打开 mainwindow.cpp 文件,找到 MainWindow 构造函数。在这个函数中,你可以添加以下代码来创建菜单:

// 创建 "File" 菜单
QMenu* fileMenu = menuBar()->addMenu(tr("&File"));

// 创建 "Open" 动作并添加到 "File" 菜单
QAction* openAction = fileMenu->addAction(tr("&Open"));
connect(openAction, &QAction::triggered, this, &MainWindow::onOpen);

// 创建 "Exit" 动作并添加到 "File" 菜单
QAction* exitAction = fileMenu->addAction(tr("E&xit"));
connect(exitAction, &QAction::triggered, this, &MainWindow::close);

// 创建 "Edit" 菜单
QMenu* editMenu = menuBar()->addMenu(tr("&Edit"));

// 创建 "Copy" 动作并添加到 "Edit" 菜单
QAction* copyAction = editMenu->addAction(tr("&Copy"));
connect(copyAction, &QAction::triggered, this, &MainWindow::onCopy);

实现动作槽函数:然后你需要在 MainWindow 类中实现 onOpen 和 onCopy 槽函数。这些函数会在用户选择相应的菜单项时被调用。你可以根据需要实现这些函数,例如:

void MainWindow::onOpen()
{
    // 实现 "Open" 动作
    qDebug() << "Open action triggered";
}

void MainWindow::onCopy()
{
    // 实现 "Copy" 动作
    qDebug() << "Copy action triggered";
}

这里进行了简化,上述代码在用户选择 "Open" 或 "Copy" 菜单项时打印一条调试信息。在实际应用中,你需要在这些函数中实现相应的功能。

为方便新手学习,下面给出添加图示:

你还需要在 mainwindow.h 中添加这槽函数的声明,具体位置是在

private:

    Ui::MainWindow *ui;

};

#endif // MAINWINDOW_H

之前,添加

//添加槽函数的声明
private slots:
    void onOpen();   // 在这里添加 onOpen 槽函数的声明
    void onCopy();   // 在这里添加 onCopy 槽函数的声明

这是因为在 Qt 中,槽函数必须在类的声明中使用 Q_SLOTS 宏(或者其等价的 slots 宏)声明,否则 Qt 元对象系统会找不到这些槽函数。为方便新手学习,下面给出添加图示:

二)通过户界面设计器设计菜单

先创建新项目ch03,打开 Qt Creator 10,点击 “File” -> “New File or Project”。

在 “New Project” 对话框中,选择 “Qt Widgets Application”,然后点击 “Choose”。然后按照向导提示创建新项目(我这里,初项目名设置为ch03,其他向导按默认),参见下图:

1、打开用户界面设计器:在项目浏览器中,找到 mainwindow.ui 文件并双击它。这会打开用户界面设计器。

2、添加菜单栏:在设计器中,你应该已经看到了一个名为 "MainWindow" 的窗口。在窗口的顶部,有一个名为 "Type here" 的灰色条,这就是菜单栏(QMenuBar)。双击击这个灰色条,然后在出现的输入框中输入你想要的菜单名称,例如 "File"回车。

用类似的方法添加菜单项。

File的子菜单    objectName属性值

Open             actionOpen

Exit              actionExit

Edit的子菜单

Copy             actionCopy

在设计过程中,可以使用快捷键Ctrl+R对窗口进行预览。

3、连接菜单项信号和槽,对于菜单项 (QAction) ,Qt Creator 不提供直接创建槽函数的 GUI 方法。你需要手动进行以下步骤:

3、连接菜单项信号和槽,对于菜单项 (QAction) ,Qt Creator 不提供直接创建槽函数的 GUI 方法。你需要手动进行以下步骤:

在 mainwindow.h 中声明槽函数,具体位置是在:

private:

    Ui::MainWindow *ui;

};

#endif // MAINWINDOW_H

之前,添加:

private slots:
    void onOpen();   // 在这里添加 onOpen 槽函数的声明
    void onCopy();   // 在这里添加 onCopy 槽函数的声明 
    void onExit();   // 在这里添加 onExit 槽函数的声明

为方便新手学习,下面给出添加图示:

在 mainwindow.cpp 中定义这些槽函数:

void MainWindow::onOpen()
{
    qDebug() << "Open action triggered";
}

void MainWindow::onCopy()
{
    qDebug() << "Copy action triggered";
}

void MainWindow::onExit()
{
    close();
}

这里进行了简化,上述代码在用户选择 "Open" 或 "Copy" 菜单项时打印一条调试信息, 在实际应用中,你需要在这些函数中实现相应的功能。 "Exit" 菜单关闭窗体。

在 mainwindow.cpp 的构造函数中,还要建立 QAction 和槽函数的关联。请找到

MainWindow::MainWindow(QWidget *parent)

    : QMainWindow(parent)

    , ui(new Ui::MainWindow)

{

ui->setupUi(this);

}

在ui->setupUi(this);之后,添加如下几句:

    //建立 QAction 和槽函数的关联
    connect(ui->actionOpen, &QAction::triggered, this, &MainWindow::onOpen);
    connect(ui->actionCopy, &QAction::triggered, this, &MainWindow::onCopy);
    connect(ui->actionExit, &QAction::triggered, this, &MainWindow::onExit);  // 添加

这样,当你在运行的程序中点击 "Open" 、 "Copy" 或"Exit"菜单项时,就会调用相应的槽函数。

为方便新手学习,下面给出添加图示:

Qt程序菜单(通过代码创建)视频https://www.bilibili.com/video/BV1uz4y1y7Eu/

Qt程序菜单2(通过UI文件创建)视频https://www.bilibili.com/video/BV1ft4y1e7hD/

三)简单记事本例子 

文件菜单包括:打开、保存、清除、关闭。
为 文本编辑区域TextEdit添加右键菜单以实现复制和粘贴功能。

待续

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

LabVIEW开发分布式光纤油气管道泄漏检测及预警系统

LabVIEW开发分布式光纤油气管道泄漏检测及预警系统 随着油气工业的发展&#xff0c;管道泄漏成为一个严峻的安全问题。本文介绍了一种基于LabVIEW的分布式光纤油气管道泄漏检测及预警系统的设计思路和组成结构。系统包括硬件和软件两部分&#xff0c;其中硬件部分详细阐述了分…

【python】爬取知乎热榜Top50保存到Excel文件中【附源码】

欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 一、导入必要的模块&#xff1a; 这篇博客将介绍如何使用Python编写一个爬虫程序&#xff0c;从斗鱼直播网站上获取图片信息并保存到本地。我们将使用requests模块发送HTTP请求和接收响应&#xff0c;以及os模块处理文件…

一口气搞懂【Linux内存管理】,就靠这60张图、59个问题了

按&#xff1a;基于x86处理器上&#xff0c;以系统启动过程中内存管理的逐步构建为主轴&#xff0c;分析内存的管理方式与其相关的安全防护功能。 1、如何知道计算机内存布局&#xff1f;内存空间有多少&#xff1f; 春江水暖鸭先知&#xff0c;计算机上电启动的时候&#xf…

微信预约小程序制作指南:从小白到专家

在当今的数字时代&#xff0c;微信小程序已经成为了一种非常流行的应用方式。预约功能更是成为了许多小程序的核心功能之一。如果你也想为你的小程序添加预约功能&#xff0c;以下步骤将会对你有所帮助。 一、进入乔拓云网后台 乔拓云网是一个在线小程序开发平台&#xff0c;你…

.pings勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复

导言&#xff1a; 随着科技的发展&#xff0c;网络空间中的威胁也日益猖獗&#xff0c;其中之一就是勒索病毒&#xff0c;而.pings 勒索病毒则是其中的一种。本文将深入介绍.pings 勒索病毒的特征、恢复被其加密的数据文件的方法&#xff0c;并提供预防措施&#xff0c;以保障…

【redis】Redis中的字典类型:数据结构与使用方法

文章目录 Redis中的字典类型&#xff1a;数据结构与使用方法简介如何提高哈希表性能如何使用 Redis中的字典类型&#xff1a;数据结构与使用方法 简介 Redis中的字典类型的底层实现是哈希表&#xff08;Hash Table&#xff09;。 Redis的字典使用哈希表作为底层实现&#xf…

理解 Node.js 中的事件循环

你已经使用 Node.js 一段时间了&#xff0c;构建了一些应用程序&#xff0c;尝试了不同的模块&#xff0c;甚至对异步编程感到很舒适。但是有些事情一直在困扰着你——事件循环&#xff08;Event Loop&#xff09;。 如果你像我一样&#xff0c;花费了无数个小时阅读文档和观看…

Linux--好玩的进度条

前言 先来看看我们想要达到的进度条效果&#xff0c;具体代码会在文章最后面放出。 一、创建文件及Makefile 我们需要实现声明的定义的分离&#xff0c;因此创建如下三个文件。 process.h prcess.c main.c。 touch process.h process.c main.c 同时还需要创建Makefi…

【MySQL】数据库之Redis的持久化

目录 一、Redis的高可用 1.1什么是高可用 1.2Redis的高可用技术 1.3持久化功能 1.4Redis持久化的方式 二、Redis的持久化之RDB 2.1RDB持久化的触发方式 触发条件 RDB持久化的触发分为手动触发和自动触发两种。 &#xff08;1&#xff09;手动触发 &#xff08;2&…

5 - 视图|存储过程

视图&#xff5c;存储过程 视图视图基本使用使用视图视图进阶 存储过程创建存储过程存储过程进阶存储过程参数循环结构 视图 视图是虚拟存在的表 表头下的数据在真表里 表头下的数据存储在创建视图时 在select命令访问的真表里 优点&#xff1a; 安全数据独立简单 用户无需关…

AArch64 memory management学习(二)

提示 该博客主要为个人学习&#xff0c;通过阅读官网手册整理而来&#xff08;个人觉得阅读官网的英文文档非常有助于理解各个IP特性&#xff09;。若有不对之处请参考参考文档&#xff0c;以官网文档为准。AArch64 memory management学习一共分为两章&#xff0c;这是第二章。…

Ubuntu下AI4Green开源ELN服务的简单部署

主部署程序&#xff1a;AI4Green 配置参考这篇文档&#xff1a;AI4Green开源ELN&#xff08;电子实验记录本&#xff09;-CSDN博客 流量转发和负载均衡&#xff1a;使用Nginx 配置参考这篇文档&#xff1a;Nginx负载均衡-CSDN博客 SSL配置部分参考这篇文档&#xff1a; 设置…

python自动化运维管理拓扑

1、简介 这部分实验是属于python自动化管理拓扑、配置拓扑的实验。模拟企业配置中&#xff0c;使用python自动化批量管理网络设备&#xff0c;减少人力物力时间成本的场景。 2、实验环境 ensp软件centos。 ensp中需要配置好cloud&#xff0c;连接本地的vmnet8虚拟网卡&…

基于多反应堆的高并发服务器【C/C++/Reactor】(中)解析请求头并存储

一、解析请求头并存储 ### 解析请求头数据 1.数据存储在对应的Buffer结构内存块中。解析时&#xff0c;需要将readPos更新到请求头的起始位置parseHttpRequestLine函数中已经为解析请求头做好了准备。 回顾一下parseHttpRequestLine函数: bool parseHttpRequestLine(struct…

802.1X(HCIP)

目录 一、802.1X协议概述 1、802.1X协议概述 2、802.1X基本概念 认证模式 认证方式 端口控制方式 3、802.1X认证触发机制 客户端主动触发 设备端主动触发&#xff08;用于支持不能主动发送EAPOL-Start报文的客户端&#xff09; 4、EAP体系结构 5、EAP报文封装结构 6…

RT-Thread: 基于STM32CubeMX配置驱STM32驱动的USB虚拟串口调试

关键词&#xff1a;USB 虚拟串口 USB虚拟串口&#xff0c;RT-Thread Studio&#xff0c;STM32 说明&#xff1a; 1&#xff1a;文档记录 STM32F103系列基于 RT-Thread 系统的 USB虚拟串口的开启及数据收发应用流程介绍。 2&#xff1a;本文以STM32F103C8T6型号做测试&#x…

K8S中的Pod到底是什么

01 概述 In earlier chapters we discussed how you might go about containerizing your application, but in real-world deployments of containerized applications you will often want to colocate multiple applications into a single atomic unit, scheduled onto a …

USB定位检测

拍摄要求&#xff1a; 1、精度要求&#xff1a;检测USB接口内芯位置是否处于接口的中心&#xff0c;检测精度0.05mm。 2.速度要求&#xff1a;一分钟检测3个产品&#xff1b;一次一个产品&#xff1b; 拍摄思路&#xff1a; 如图&#xff0c;想要检测USB内芯位置是否处于接口的…

信号的互相关计算及时延估计

1. 信号的互相关计算 互相关反映向量x和移位&#xff08;滞后&#xff09;向量y之间的相似性。 最直观的解释是&#xff1a;互相关的作用是为了找到信号在哪一时刻与另一信号最像&#xff08;另一信号为本身时就是自相关&#xff09;&#xff01; 滑动求互相关&#xff08;图…

软件测试|Linux基础教程:ln命令与软链接和硬链接

简介 在Linux系统中&#xff0c;ln命令是一个非常有用的工具&#xff0c;用于创建链接&#xff08;link&#xff09;&#xff0c;将一个文件或目录链接到另一个位置。链接允许一个文件或目录可以同时存在于多个位置&#xff0c;而不会占用额外的磁盘空间。ln命令支持创建硬链接…