Qt 6之五:创建菜单

news2024/11/19 1:45:35

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.coloradmin.cn/o/1367859.html

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

相关文章

初识大数据,一文掌握大数据必备知识文集(15)

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…

Kafka与RabbitMQ的区别

消息队列介绍 消息队列&#xff08;Message Queue&#xff09;是一种在分布式系统中进行异步通信的机制。它允许一个或多个生产者在发送消息时暂时将消息存储在队列中&#xff0c;然后由一个或多个消费者按顺序读取并处理这些消息。 消息队列具有以下特点&#xff1a; 异步通…

STM32F103C8T6(HAL库函数 - 内部Flash操作)

简介 STM32F103C8T6 内部Flash 为 64KB&#xff0c;本次将对他多余空间进行读写。 介绍 数据手册下载 STM32F103x8/STM32F103xB 数据手册 包含Flash Memory Page分布 STM32F设备命名 设备容量类型 中容量类型 内部空间介绍 64 KBytes大小Flash Memory 从 0x0800 0000 ~…

Mysql-排序查询方法

接上篇Mysql数据库的基础操作-CSDN博客 25. 基础-SQL-DCL-权限控制-_哔哩哔哩_bilibili 1、排序语法 2、查询结果示例 这个查询结果&#xff0c;因为特意选的age18 的数据来统计&#xff0c;所以当每一条数据的age一样时&#xff0c;使用worknno进行排序。可以看到work的升序和…

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

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

NUXT3学习笔记

1.邂逅SPA、SSR 1.1 单页面应用程序 单页应用程序 (SPA) 全称是&#xff1a;Single-page application&#xff0c;SPA应用是在客户端呈现的&#xff08;术语称&#xff1a;CSR&#xff08;Client Side Render&#xff09;&#xff09; SPA的优点 只需加载一次 SPA应用程序只需…

迎接人工智能的下一个时代:ChatGPT的技术实现原理、行业实践以及商业变现途径

课程背景 2023年&#xff0c;以ChatGPT为代表的接近人类水平的对话机器人&#xff0c;AIGC不断刷爆网络&#xff0c;其强大的内容生成能力给人们带来了巨大的震撼。学术界和产业界也都形成共识&#xff1a;AIGC绝非昙花一现&#xff0c;其底层技术和产业生态已经形成了新的格局…

Linux-添加虚拟内存,不添加硬盘方式操作

在linux中&#xff0c;当物理内存mem不足时&#xff0c;就会使用虚拟内存(swap分区) 例如增加2G虚拟内存&#xff0c;操作如下: 1.查看内存大小 [rootlocalhost ~]# free -m 2.创建要作为swap分区的文件:增加1GB大小的交换分区&#xff0c;则命令写法如下&#xff0c;其中的cou…

探索区块链的未来:Ignis的母子架构进展与模块化区块链趋势

随着区块链技术的不断演进&#xff0c;模块化区块链成为热点&#xff0c;而其高拓展性的优点早在Ignis公链的母子架构上就已经实现。本文将探讨这两个方面&#xff0c;揭示它们如何推动区块链技术向前发展。 模块化区块链的兴起与Celestia 模块化区块链通过将不同的功能分解为…

开源C语言库Melon:Cron格式解析

本文介绍开源C语言库Melon的cron格式解析。 关于 Melon 库&#xff0c;这是一个开源的 C 语言库&#xff0c;它具有&#xff1a;开箱即用、无第三方依赖、安装部署简单、中英文文档齐全等优势。 Github repo 简介 cron也就是我们常说的Crontab中的时间格式&#xff0c;格式如…

一起来了解综合能源服务认证

首先&#xff0c;综合能源服务认证是有国家政策支持的&#xff0c; 《能源生产和消费革命战略&#xff08;2016-2030&#xff09;》中指出:1、能源生产端要以绿色低碳为方向&#xff0c;推动能源集中式和分布式开发并举&#xff0c;大幅提高新能源和可再生能源比重&#xff1b…

Async In C#5.0(async/await)学习笔记

此文为Async in C#5.0学习笔记 1、在async/await之前的异步 方式一&#xff1a;基于事件的异步Event-based Asynchronous Pattern (EAP). private void DumpWebPage(Uri uri) {WebClient webClient new WebClient();webClient.DownloadStringCompleted OnDownloadStringCo…

【大数据进阶第三阶段之ClickHouse学习笔记】ClickHouse的简介和使用

1、ClickHouse简介 ClickHouse是一种列式数据库管理系统&#xff08;DBMS&#xff09;&#xff0c;专门用于高性能数据分析和数据仓库应用。它是一个开源的数据库系统&#xff0c;最初由俄罗斯搜索引擎公司Yandex开发&#xff0c;用于满足大规模数据分析和报告的需求。 开源地址…

01-shell

shell 1. shell概述 1.1 引入 完成以下任务: 判断用户家目录下&#xff08;~&#xff09;下面有没有一个叫 test 的文件夹如果没有&#xff0c;提示按 y 创建并进入此文件夹&#xff0c;按 n 退出如果有&#xff0c;直接进入&#xff0c;提示请输入一个字符串&#xff0c;并…

Qt/C++音视频开发63-设置视频旋转角度/支持0-90-180-270度旋转/自定义旋转角度

一、前言 设置旋转角度&#xff0c;相对来说是一个比较小众的需求&#xff0c;如果视频本身带了旋转角度&#xff0c;则解码播放的时候本身就会旋转到对应的角度显示&#xff0c;比如手机上拍摄的视频一般是旋转了90度的&#xff0c;如果该视频文件放到电脑上打开&#xff0c;…

探索PyTorch优化和剪枝技术相关的api函数

torch.nn子模块Utilities解析 clip_grad_norm_ torch.nn.utils.clip_grad_norm_ 是 PyTorch 深度学习框架中的一个函数&#xff0c;它主要用于控制神经网络训练过程中的梯度爆炸问题。这个函数通过裁剪梯度的范数来防止梯度过大&#xff0c;有助于稳定训练过程。 用途 防止…

数据权限-模型简要分析

权限管控可以通俗的理解为权力限制&#xff0c;即不同的人由于拥有不同权力&#xff0c;他所看到的、能使用的可能不一样。对应到一个应用系统&#xff0c;其实就是一个用户可能拥有不同的数据权限&#xff08;看到的&#xff09;和操作权限&#xff08;使用的&#xff09;。 …

基于ssm的双减后初小教育课外学习生活活动平台的设计与实现论文

双减后初小教育课外学习生活活动平台的设计与实现 摘 要 当下&#xff0c;正处于信息化的时代&#xff0c;许多行业顺应时代的变化&#xff0c;结合使用计算机技术向数字化、信息化建设迈进。以前学校对于课外学习活动信息的管理和控制&#xff0c;采用人工登记的方式保存相关…

RocketMQ5-02快速部署RocketMQ5.x(手动和容器部署)

RocketMQ5快速入门指南(含部署实践) 部署环境本机单机可执行包部署、Docker部署 Mac部署&#xff1a;下载源文件可执行包部署 NameServer 问题1&#xff1a;资源不足补充: 关于日志的输出 可执行包部署 Broker 对于Local模式对于Cluster模式 对于 ProxyDocker部署 NameServerD…

AcrelEMS-BP生物制药能效管理系统——安科瑞 顾烊宇

​01 行业方案 02 项目案例 安科瑞 顾烊宇