C++学习之路(七)C++ 实现简单的Qt界面(消息弹框、按钮点击事件监听)- 示例代码拆分讲解
这个示例创建了一个主窗口,其中包含两个按钮。第一个按钮点击时会显示一个简单的消息框,第二个按钮点击时会执行一个特定的操作(在这个例子中,仅打印一条调试信息)。

功能描述:
-  创建窗口和布局: 使用 QWidget和QVBoxLayout创建主窗口并设置垂直布局,将按钮放置在布局中。
-  按钮操作: 创建多个按钮,并且为每个按钮连接了不同的操作,例如显示消息框或执行特定操作。 
基础知识点:
-  QWidget 和布局管理器(QLayout): QWidget是Qt应用程序中所有用户界面对象的基类,它代表一个窗口或一个控件。QVBoxLayout是Qt提供的一种布局管理器,用于垂直排列控件。
-  QPushButton 和信号槽机制: QPushButton是Qt中的按钮类,通过信号槽机制,按钮的点击事件(clicked信号)连接到槽函数(showMessageBox和performSpecificAction)来执行相应的操作。
-  QMessageBox: QMessageBox是Qt提供的对话框类之一,用于在程序中显示消息框、警告框、错误框等。
-  事件循环: Qt中的应用程序需要进入事件循环( QApplication::exec())来响应用户的交互操作,比如按钮点击等。
-  宏 Q_OBJECT和元对象系统:Q_OBJECT宏用于启用Qt的元对象系统,这是信号和槽机制的基础,允许在运行时识别对象及其属性、方法和信号。对包含Q_OBJECT的类,需要使用元对象编译器(moc)进行预处理。
示例在Clion中运行步骤:
1. 新建项目

2. 粘贴代码
#include <QApplication>
#include <QWidget>
#include <QPushButton>
#include <QVBoxLayout>
#include <QMessageBox>
#include <QDebug>class MyMainWindow : public QWidget {
Q_OBJECT
public:explicit MyMainWindow(QWidget *parent = nullptr) : QWidget(parent) {setWindowTitle("实用功能示例");auto *layout = new QVBoxLayout(this);auto *button1 = new QPushButton("显示消息框");connect(button1, &QPushButton::clicked, this, &MyMainWindow::showMessageBox);auto *button2 = new QPushButton("执行特定操作");connect(button2, &QPushButton::clicked, this, &MyMainWindow::performSpecificAction);layout->addWidget(button1);layout->addWidget(button2);setLayout(layout);}private slots:void showMessageBox() {QMessageBox::information(this, "消息", "这是一个消息框示例!");}static void performSpecificAction() {// 执行特定的操作qDebug() << "执行了特定操作!";}
};int main(int argc, char *argv[]) {QApplication a(argc, argv);MyMainWindow mainWindow;mainWindow.show();return QApplication::exec();
}#include "main.moc"这个示例可以作为一个起点,我们可以进一步添加更多按钮,并且为每个按钮连接不同的功能。Qt提供了丰富的UI组件和信号/槽机制,可以轻松创建具有各种实用功能的用户界面。
3. 编译运行

 
代码拆解,知识点总结
这个示例中的代码涉及了许多Qt中的关键概念和功能。我们来拆分讲解一下示例代码:
🟥 1. 创建 MyMainWindow 类:
 
class MyMainWindow : public QWidget {Q_OBJECT
public:explicit MyMainWindow(QWidget *parent = nullptr) : QWidget(parent) {setWindowTitle("实用功能示例");auto *layout = new QVBoxLayout(this);auto *button1 = new QPushButton("显示消息框");connect(button1, &QPushButton::clicked, this, &MyMainWindow::showMessageBox);auto *button2 = new QPushButton("执行特定操作");connect(button2, &QPushButton::clicked, this, &MyMainWindow::performSpecificAction);layout->addWidget(button1);layout->addWidget(button2);setLayout(layout);}private slots:void showMessageBox() {QMessageBox::information(this, "消息", "这是一个消息框示例!");}static void performSpecificAction() {qDebug() << "执行了特定操作!";}
};
-  构造函数 MyMainWindow:- 设置主窗口的标题为 “实用功能示例”。
- 创建了一个垂直布局管理器 layout。
- 创建了两个按钮 button1和button2,并将它们添加到布局中。
- 使用 setLayout设置主窗口的布局为layout。
 
-  槽函数: -  showMessageBox()槽函数在按钮1被点击时被调用,显示一个信息框(消息框)。
-  performSpecificAction()静态函数与按钮2的点击事件关联。它用于展示静态函数的连接方式,此处用于打印调试信息。
 
-  
🟥 2. 主函数 main():
 
int main(int argc, char *argv[]) {QApplication a(argc, argv);MyMainWindow mainWindow;mainWindow.show();return QApplication::exec();
}
- 应用程序入口 main():- 创建了一个 QApplication对象a,Qt应用程序的入口点。
- 创建了 MyMainWindow对象mainWindow。
- 调用 show()函数显示主窗口。
- 通过 QApplication::exec()进入事件循环,等待并响应用户的交互操作。
 
- 创建了一个 
🟥 关键知识点:
-  QWidget 和布局管理器(QLayout): 使用 QWidget和QVBoxLayout来创建主窗口及其布局。
-  QPushButton 和信号槽: 使用 QPushButton创建按钮,并使用信号槽机制连接按钮的点击事件与相应的槽函数。
-  QMessageBox: 使用 QMessageBox::information创建一个信息框,显示消息。
-  静态函数的使用: 示例中展示了一个静态成员函数与按钮点击事件关联的方法。 
在这个示例中,初学者要注意哪些地方?
对于初学者来说,这个示例涉及到了Qt的一些基础概念和常用功能。以下是初学者在阅读和理解这个示例时可能需要注意的地方:
1. 对象和类的基本概念:
-  继承和构造函数: 了解 MyMainWindow类继承自QWidget,并学习构造函数的作用。
-  布局管理器的使用: 理解如何使用布局管理器(这里使用了 QVBoxLayout)来管理窗口内部的控件。
2. 按钮和信号槽:
-  QPushButton 的创建和连接: 学习如何创建按钮,并且使用 connect函数将按钮的信号(比如clicked)连接到槽函数。
-  槽函数的定义和使用: 理解槽函数的定义方式,以及它们被触发时执行的操作。在这个示例中, showMessageBox()和performSpecificAction()是两个槽函数。
3. Qt中的一些类和方法:
-  QMessageBox 的使用: 了解 QMessageBox类用于创建不同类型的对话框,并在应用程序中显示消息、警告等。
-  QApplication 和事件循环: 了解 QApplication的作用是启动Qt应用程序并管理应用程序的资源。QApplication::exec()进入Qt的事件循环,负责处理用户输入、事件和信号等。
4. 静态成员函数:
- 静态函数的使用: 在这个示例中,performSpecificAction()是一个静态成员函数,它与按钮的点击事件关联。初学者可以理解静态成员函数的使用方式和它们的作用。
5. Q_OBJECT 宏和元对象系统:
- Q_OBJECT 宏的作用: 了解 Q_OBJECT宏的作用是启用Qt的元对象系统,它是信号和槽机制的基础,在使用信号和槽时需要加上这个宏。
理解以上概念和注意点对于初学者来说是很重要的,因为它们构成了Qt应用程序开发中的基础知识,能够帮助初学者更好地理解和编写Qt应用程序。
这个示例中的QT文档应该去哪查看?
当涉及到Qt文档的查阅时,Qt官方文档是最全面和权威的资源。你可以在以下网址找到Qt的官方文档:https://doc.qt.io/,本示例使用的是Qt5版本 https://doc.qt.io/qt-5/ 。
在这个网站上,你可以找到与Qt相关的全部文档,包括但不限于以下内容:
- Qt的类和模块文档: 包括每个Qt类的详细说明,它们的成员函数、属性、信号、槽等。
- 教程和示例: 提供了许多用于学习的教程和示例,逐步介绍Qt的各种功能和用法。
- Qt的指南和手册: 包括使用Qt开发的指南、最佳实践、Qt Quick、Qt Widgets等方面的手册。
- 发布说明和版本信息: 如果你想查看特定版本的Qt的发布说明和变更信息,也可以在官方文档中找到。
对于初学者,Qt的入门指南、教程和示例是很有帮助的,它们可以帮助你快速入门并掌握Qt的基础知识。同时,Qt的类和模块文档是深入了解Qt API的重要资源。
除了官方文档,Qt还提供了许多其他资源,比如Qt的论坛、博客、示例代码等,这些资源也可以帮助你更好地理解和应用Qt。
本文就到这里了,感谢您的阅读,明天还有更多的实例学习文章等着你 🎆。别忘了点赞、收藏~ Thanks♪(・ω・)ノ 🍇。
相关文章:
 
C++学习之路(七)C++ 实现简单的Qt界面(消息弹框、按钮点击事件监听)- 示例代码拆分讲解
这个示例创建了一个主窗口,其中包含两个按钮。第一个按钮点击时会显示一个简单的消息框,第二个按钮点击时会执行一个特定的操作(在这个例子中,仅打印一条调试信息)。 功能描述: 创建窗口和布局:…...
python实现一个计算器
实现一个计算器首先熟悉一下这个阅读器的属性import subprocess subprocess.run(["espeak", "-v", "enf3", "This is a Calculator"])class Calculator:def speaker(self,word):subprocess.run(["espeak", "-v", …...
C++ 共享内存ShellCode跨进程传输
在计算机安全领域,ShellCode是一段用于利用系统漏洞或执行特定任务的机器码。为了增加攻击的难度,研究人员经常探索新的传递ShellCode的方式。本文介绍了一种使用共享内存的方法,通过该方法,两个本地进程可以相互传递ShellCode&am…...
如何快速移植(从STM32F103到STM32F407)
最近用到F4的地方比较多,网上代码还是F1多一些,便需要移植代码,如何快速移植代码呢? 看下面这篇文章 外设 首先就是STM32的外设了。 STM32F407ZGT6的基本外设 STM32F407ZGT6 作为 MCU,该芯片是 STM32F407 里面配置…...
 
python高级练习题库实验1(B)部分
文章目录 题目1代码实验结果题目2代码实验结果题目3代码实验结果题目4代码实验结果题目5代码实验结果题目总结题目1 打包糖果小游戏,用户输入糖果品牌与个数,还有一个盒子里面可以装多少个糖果,输出一些打印信息,如下图所示: 代码 print("Packaging lollies into…...
Qt Rsa 加解密方法使用(pkcs1, pkcs8, 以及文件存储和内存存储密钥)
Qt RSA 加解密 完整使用 密钥格式: pkcs#1pkcs#8 如何区分密钥对是PKCS1还是PKCS8? 通常PKCS1密钥对的开始部分为:-----BEGIN RSA PRIVATE KEY-----或 -----BEGIN RSA PUBLIC KEY-----。而PKCS8密钥对的开始部分为:-----BEGIN…...
区分物理端口与软件端口概念:以交换机端口和Linux系统中的端口为例
文章目录 交换机端口和Linux系统中的端口有什么区别?1. 交换机的端口2. Linux系统中的端口因此,尽管两者都被称为"端口",但它们代表的含义和用途是完全不同的。 交换机端口和Linux系统中的端口有什么区别? 虽然都被称为…...
 
力扣226:翻转二叉树
力扣226:翻转二叉树 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。 示例 1: 输入:root [4,2,7,1,3,6,9] 输出:[4,7,2,9,6,3,1] 示例 2: 输入:root [2,1,3]…...
 
亚马逊鲲鹏系统智能自动注册与AI角色养号,探索数字化新境界
在数字化时代,亚马逊鲲鹏系统以其强大的自动化功能,为用户提供了前所未有的购物体验。如果你想利用鲲鹏系统进行自动化注册,那么准备好邮箱、IP、手机号等关键信息后,你将轻松实现自动注册,为购物之旅开启智能化新篇章…...
AOP操作日志记录
AOP操作日志记录 1.创建注解 Retention(RetentionPolicy.RUNTIME) Target(ElementType.METHOD) public interface PassportLog {String operatePage();String operateType();ClassTypEnum classType();}2.创建切面 对于字典,可以通过注解属性去转换,枚举…...
Linux C语言 42-进程间通信IPC之网络通信(套接字)
Linux C语言 42-进程间通信IPC之网络通信(套接字) 本节关键字:C语言 进程间通信 网络通信 套接字 TCP UDP 相关库函数:socket、bind、listen、accept、send、recv、sendto、recvfrom 参考之前的文章 Linux C语言 30-套接字操作…...
 
微服务知识大杂烩
1.什么是微服务? 微服务(Microservices)是一种软件架构风格,将一个大型应用程序划分为一组小型、自治且松耦合的服务。每个微服务负责执行特定的业务功能,并通过轻量级通信机制(如HTTP)相互协作。每个微服务可以独立开发、部署和扩展,使得应用程序更加灵活、可伸缩和可…...
 
记录一次vscode markdown的图片路径相关插件学习配置过程
插件及说明查找过程 csdn搜索markdown图片路径,找到关于这一款插件的回答。打开vscode拓展搜索Paste Image这款插件,看到下载量挺高的,应该不赖。 点击仓库,进入该插件开源的github仓库,查看README文件阅读说明. 淡然在Vscode 插件项目下的细…...
 
设计原则 | 依赖转置原则
一、依赖转置原则(DIP:Dependence Inversion Principle) 1、原理 高层模块不应该依赖低层模块,二者都应该依赖于抽象抽象不应该依赖于细节,细节应该依赖于抽象 2、层次化 Booch曾经说过:所有结构良好的面…...
前端开发实用技巧与经验分享
导语:在前端开发领域,掌握一些实用的技巧和经验可以帮助你更高效地完成任务。本文将分享一些前端开发的实用技巧和经验,帮助你在工作中更好地应对各种挑战。 一、使用开发者工具进行调试和优化 熟练掌握浏览器开发者工具的使用,…...
 
推荐一款Excel快速加载SQL的插件,方便又好用
如果告诉你只需要双击一下,SQL数据库中存放在表里面的数据,就能加载到你的Excel中,你想不想要? 今天给大家推荐一款好用的Excel插件,安装简单,使用方便,是经常使用SQL数据库的不二。 这款插件…...
 
Docker快速入门(docker加速,镜像,容器,数据卷常见命令操作整理)
Docker本质是将代码所需的环境依赖进行打包运行,而在Docker中最重要的是镜像和容器 镜像:可以简单地理解为每启动一个docker镜像就会占用计算机一个进程,这个进程和另外起的docker镜像的进程是相互独立的,以数据库为例,每个镜像都会copy一份数据库,在他所在的进程中.别的镜像在…...
 
http和https的区别有哪些
目录 HTTP(HyperText Transfer Protocol) HTTPS(HyperText Transfer Protocol Secure) 区别与优势 应用场景 未来趋势 当我们浏览互联网时,我们经常听到两个常用的协议:HTTP(HyperText Tra…...
 
使用Keil-MDK生成*.bin格式可执行文件
使用Keil-MDK生成*.bin格式可执行文件 文章目录 使用Keil-MDK生成*.bin格式可执行文件前言一、fromelf.exe工具二、使用方法1.配置输出2.输出格式 前言 在使用Keil MDK的集成开发环境中,默认情况下可以生成*.axf格式的调试文件和*.hex格式的可执行文件。虽然文件可…...
 
基于springboot+vue篮球联盟管理系统源码
🍅 简介:500精品计算机源码学习 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 文末获取源码 目录 一、以下学习内容欢迎交流: 二、文档资料截图: 三、项目技术栈 四、项目运行图 背景: 篮球运…...
 
XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。  - 个性化梦境…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...
 
MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...
 
微信小程序 - 手机震动
一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注:文档 https://developers.weixin.qq…...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...
 
【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...
 
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
 
VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP
编辑-虚拟网络编辑器-更改设置 选择桥接模式,然后找到相应的网卡(可以查看自己本机的网络连接) windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置,选择刚才配置的桥接模式 静态ip设置: 我用的ubuntu24桌…...
