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添加右键菜单以实现复制和粘贴功能。

待续

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

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

相关文章

untiy使用http下载资源

文章目录 提醒下载一个资源并保存到本地下载一张图片 提醒 部分API需要将Unity的 Edit/PrejectSetting/Player/OtherSetttings/AConfiguration/ApiCompatibilityLevel 设为.NetFramework 才可以使用 下载一个资源并保存到本地 private IEnumerator DownloadFormServer_IE(st…

cisp难不难?cisp如何备考通过率高?

*CISP 全称为Certified Information Security Professional&#xff0c;是国际上广受欢迎的信息安全专业认证之一。 对于许多信息安全领域的从业者来说&#xff0c;CISP认证是他们职业生涯中的重要一步。那么&#xff0c;CISP难不难呢?如何备考通过率更高呢?接下来&#xf…

详细探讨mfc140.dll丢失的解决方法,并比较各种方法的优劣

mfc140.dll是Microsoft Foundation Class (MFC) 库中一个重要的DLL文件&#xff0c;它包含了多个执行程序使用的函数和资源。这个库通常用于开发Windows操作系统上的应用程序。但有时会发生mfc140.dll缺失或损坏的错误&#xff0c;导致一些依赖它的应用程序无法运行。今天的这篇…

python语言在web上的应用:如何节省服务器资源?

背景介绍​ 在web开发中的应用广泛​ 在web开发中的应用广泛。随着互联网的发展&#xff0c;web应用越来越普遍&#xff0c;而Python作为一种简洁、高效的编程语言&#xff0c;被广泛应用于web开发领域。Python提供了丰富的库和框架&#xff0c;如Django、Flask等&#xff0c…

2024年中国电子学会青少年编程等级考试安排的通知

各有关单位、全体考生: 中国电子学会青少年等级考试&#xff08;以下简称等级考试&#xff09;是中国电子学会为落实《全民科学素质行动规划纲要》&#xff0c;提升青少年电子信息科学素质水平而开展的社会化评价项目。等级考试自2011年启动以来&#xff0c;作为中国电子学会科…

微服务概述之单体架构

微服务概述 互联网始于 1969年美国的阿帕网&#xff08;ARPA&#xff09;&#xff0c;最开始的阿帕网只在美国军方使用。随着时间的推移&#xff0c;一些大学也开始加入建设&#xff0c;慢慢演化成了现在的因特网 &#xff08;Internet&#xff09;。随着计算机网络的普及&…

使用STM32和MPU6050实现基于手势的室内导航系统

基于STM32和MPU6050的基于手势的室内导航系统是一个创新而具有挑战性的项目。在本文中&#xff0c;我们将介绍如何利用STM32微控制器和MPU6050传感器实现基于手势的室内导航系统&#xff0c;并提供相应的代码示例。 1. 系统概述 基于手势的室内导航系统旨在通过手势识别的方式…

Web前端-jQuery

文章目录 jQuery1.1 jQuery 介绍1.1.1 JavaScript 库1.1.2 jQuery的概念1.1.3 jQuery的优点 1.2 jQuery 的基本使用1.2.1 jQuery 的下载1.2.2 jQuery快速入门1.2.3 jQuery入口函数1.2.4 jQuery中的顶级对象$1.2.5 jQuery 对象和 DOM 对象1.2.6. jQuery 对象和 DOM 对象转换 1.3…

Vmware安装Windows11系统及下载MySQL步骤(超详细)

一、创建虚拟机 ①选择自定义 ②直接点击下一步 ③选择Windows 11 x64 ④命名虚拟机以及选择路径 ⑤新版本的虚拟机需要加密&#xff08;密码需要8个字符以上&#xff09; ⑥选择UEFI ⑦处理器配置&#xff08;根据自己的需求&#xff09; ⑧设置虚拟机的内存 ⑨选择不使用网络…

智能监控:业务监控新选择,效率提升新动力

前言 随着科技的飞速发展&#xff0c;企业对于业务的稳定性和连续性要求越来越高。传统的监控方式虽然在一定程度上能够保证业务的正常运行&#xff0c;但在面对复杂多变的业务场景和日益增长的数据量时&#xff0c;往往显得力不从心。为了解决这一问题&#xff0c;观测云在提…

ensp与HCL共存问题

华子目录 第一种方法第二种方法&#xff08;修改注册表&#xff0c;建议使用这种方法&#xff09;第一步第二步第三步&#xff08;打开注册表修改&#xff09;第四步&#xff08;安装HCL&#xff09;第六步&#xff08;将注册表中修改的改回原来的内容&#xff09;最后 第一种方…

软件工程概论---内聚性和耦合性

目录 一.耦合性 1.内容耦合 2.公共耦合 4.控制耦合 5.标记耦合&#xff08;特征耦合&#xff09; 6.数据耦合 7.非直接耦合 二.内聚性 1.偶然内聚 2.逻辑内聚 3.时间内聚 4.过程内聚 5.通信内聚 6.顺序内聚 7.功能内聚 一.耦合性 耦合性是指软件结构中模块相互…

机器学习 前馈神经网络

人工神经网络&#xff08;Artificial Neural Network&#xff0c;ANN&#xff09;是指一系列受生物学和神经科学启发的数学模型&#xff0e;这些模型主要是通过对人脑的神经元网络进行抽象&#xff0c;构建人工神经元&#xff0c;并按照一定拓扑结构来建立人工神经元之间的连接…

大模型生成解码参数速查

控制输出长度的参数 控制所使用的生成策略的参数 用于操作模型输出 logits 的参数 定义“generate”输出变量的参数 可以在生成时使用的特殊字符

Java中SpringBoot组件集成接入【Knife4j接口文档(swagger增强)】

Java中SpringBoot组件集成接入【Knife4j接口文档】 1.Knife4j介绍2.maven依赖3.配置类4.常用注解使用1.实体类及属性(@ApiModel和@ApiModelProperty)2.控制类及方法(@Api、@ApiOperation、@ApiImplicitParam、 @ApiResponses)3.@ApiOperationSupport注解未生效的解决方法5.…

线扫相机品牌汇总(国外+国内)

线扫相机品牌汇总(国外+国内) 行者 ​ 热爱生活 22 人赞同了该文章 线扫相机也叫做线阵相机,和面阵相机一样,都是重要的工业相机。 线扫相机正如其名字那样,拍照时像扫描一样,相机和被拍照物体有相对匀速运动。 Perhaps the most common example of line scan imagin…

vue3 封装一个按钮组件(可自定义按钮样式)

效果图 鼠标悬浮有对应的文字提示&#xff0c;且图标出现背景色和颜色 实现 目前提供五个固定样式的图标及三个用户自定义的图标&#xff0c;可根据需要补充 组件代码 <script setup lang"ts"> import { onMounted, PropType, reactive, ref, watch } from v…

微创新与稳定性的权衡

之前做过一个项目&#xff0c;业务最高峰CPU使用率也才50%&#xff0c;是一个IO密集型的应用。里面涉及一些业务编排&#xff0c;所以为了提高CPU使用率&#xff0c;我有两个方案&#xff1a;一个是简单的梳理将任务可并行的采用并行流、额外线程池等方式做并行&#xff1b;另外…

Android14之解决刷机报错:Can not load Android system. Your data may be corrupt(一百七十七)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

后端程序员开发win小工具(未完待续)

github&#xff1a;https://gitee.com/forgot940629/win-tool-demo 本地启动&#xff0c;查看http://127.0.0.1:8080/form 场景 在日常工作中可能需要后端开发者开发一些辅助工具。这些辅助工具通常希望能想其他软件一样在桌面系统运行&#xff0c;并且有一些桌面应用的基本…