当前位置: 首页 > news >正文

C++学习之路(七)C++ 实现简单的Qt界面(消息弹框、按钮点击事件监听)- 示例代码拆分讲解

这个示例创建了一个主窗口,其中包含两个按钮。第一个按钮点击时会显示一个简单的消息框,第二个按钮点击时会执行一个特定的操作(在这个例子中,仅打印一条调试信息)。

在这里插入图片描述

功能描述:

  1. 创建窗口和布局: 使用 QWidgetQVBoxLayout 创建主窗口并设置垂直布局,将按钮放置在布局中。

  2. 按钮操作: 创建多个按钮,并且为每个按钮连接了不同的操作,例如显示消息框或执行特定操作。

基础知识点:

  1. QWidget 和布局管理器(QLayout): QWidget 是Qt应用程序中所有用户界面对象的基类,它代表一个窗口或一个控件。QVBoxLayout 是Qt提供的一种布局管理器,用于垂直排列控件。

  2. QPushButton 和信号槽机制: QPushButton 是Qt中的按钮类,通过信号槽机制,按钮的点击事件(clicked信号)连接到槽函数(showMessageBoxperformSpecificAction)来执行相应的操作。

  3. QMessageBox: QMessageBox 是Qt提供的对话框类之一,用于在程序中显示消息框、警告框、错误框等。

  4. 事件循环: Qt中的应用程序需要进入事件循环(QApplication::exec())来响应用户的交互操作,比如按钮点击等。

  5. 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
    • 创建了两个按钮 button1button2,并将它们添加到布局中。
    • 使用 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): 使用 QWidgetQVBoxLayout 来创建主窗口及其布局。

  • 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相关的全部文档,包括但不限于以下内容:

  1. Qt的类和模块文档: 包括每个Qt类的详细说明,它们的成员函数、属性、信号、槽等。
  2. 教程和示例: 提供了许多用于学习的教程和示例,逐步介绍Qt的各种功能和用法。
  3. Qt的指南和手册: 包括使用Qt开发的指南、最佳实践、Qt Quick、Qt Widgets等方面的手册。
  4. 发布说明和版本信息: 如果你想查看特定版本的Qt的发布说明和变更信息,也可以在官方文档中找到。

对于初学者,Qt的入门指南、教程和示例是很有帮助的,它们可以帮助你快速入门并掌握Qt的基础知识。同时,Qt的类和模块文档是深入了解Qt API的重要资源。

除了官方文档,Qt还提供了许多其他资源,比如Qt的论坛、博客、示例代码等,这些资源也可以帮助你更好地理解和应用Qt。


本文就到这里了,感谢您的阅读,明天还有更多的实例学习文章等着你 🎆。别忘了点赞、收藏~ Thanks♪(・ω・)ノ 🍇。

相关文章:

C++学习之路(七)C++ 实现简单的Qt界面(消息弹框、按钮点击事件监听)- 示例代码拆分讲解

这个示例创建了一个主窗口&#xff0c;其中包含两个按钮。第一个按钮点击时会显示一个简单的消息框&#xff0c;第二个按钮点击时会执行一个特定的操作&#xff08;在这个例子中&#xff0c;仅打印一条调试信息&#xff09;。 功能描述&#xff1a; 创建窗口和布局&#xff1a;…...

python实现一个计算器

实现一个计算器首先熟悉一下这个阅读器的属性import subprocess subprocess.run(["espeak", "-v", "enf3", "This is a Calculator"])class Calculator:def speaker(self,word):subprocess.run(["espeak", "-v", …...

C++ 共享内存ShellCode跨进程传输

在计算机安全领域&#xff0c;ShellCode是一段用于利用系统漏洞或执行特定任务的机器码。为了增加攻击的难度&#xff0c;研究人员经常探索新的传递ShellCode的方式。本文介绍了一种使用共享内存的方法&#xff0c;通过该方法&#xff0c;两个本地进程可以相互传递ShellCode&am…...

如何快速移植(从STM32F103到STM32F407)

最近用到F4的地方比较多&#xff0c;网上代码还是F1多一些&#xff0c;便需要移植代码&#xff0c;如何快速移植代码呢&#xff1f; 看下面这篇文章 外设 首先就是STM32的外设了。 STM32F407ZGT6的基本外设 STM32F407ZGT6 作为 MCU&#xff0c;该芯片是 STM32F407 里面配置…...

python高级练习题库实验1(B)部分

文章目录 题目1代码实验结果题目2代码实验结果题目3代码实验结果题目4代码实验结果题目5代码实验结果题目总结题目1 打包糖果小游戏,用户输入糖果品牌与个数,还有一个盒子里面可以装多少个糖果,输出一些打印信息,如下图所示: 代码 print("Packaging lollies into…...

Qt Rsa 加解密方法使用(pkcs1, pkcs8, 以及文件存储和内存存储密钥)

Qt RSA 加解密 完整使用 密钥格式&#xff1a; pkcs#1pkcs#8 如何区分密钥对是PKCS1还是PKCS8&#xff1f; 通常PKCS1密钥对的开始部分为&#xff1a;-----BEGIN RSA PRIVATE KEY-----或 -----BEGIN RSA PUBLIC KEY-----。而PKCS8密钥对的开始部分为&#xff1a;-----BEGIN…...

区分物理端口与软件端口概念:以交换机端口和Linux系统中的端口为例

文章目录 交换机端口和Linux系统中的端口有什么区别&#xff1f;1. 交换机的端口2. Linux系统中的端口因此&#xff0c;尽管两者都被称为"端口"&#xff0c;但它们代表的含义和用途是完全不同的。 交换机端口和Linux系统中的端口有什么区别&#xff1f; 虽然都被称为…...

力扣226:翻转二叉树

力扣226&#xff1a;翻转二叉树 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 示例 1&#xff1a; 输入&#xff1a;root [4,2,7,1,3,6,9] 输出&#xff1a;[4,7,2,9,6,3,1] 示例 2&#xff1a; 输入&#xff1a;root [2,1,3]…...

亚马逊鲲鹏系统智能自动注册与AI角色养号,探索数字化新境界

在数字化时代&#xff0c;亚马逊鲲鹏系统以其强大的自动化功能&#xff0c;为用户提供了前所未有的购物体验。如果你想利用鲲鹏系统进行自动化注册&#xff0c;那么准备好邮箱、IP、手机号等关键信息后&#xff0c;你将轻松实现自动注册&#xff0c;为购物之旅开启智能化新篇章…...

AOP操作日志记录

AOP操作日志记录 1.创建注解 Retention(RetentionPolicy.RUNTIME) Target(ElementType.METHOD) public interface PassportLog {String operatePage();String operateType();ClassTypEnum classType();}2.创建切面 对于字典&#xff0c;可以通过注解属性去转换&#xff0c;枚举…...

Linux C语言 42-进程间通信IPC之网络通信(套接字)

Linux C语言 42-进程间通信IPC之网络通信&#xff08;套接字&#xff09; 本节关键字&#xff1a;C语言 进程间通信 网络通信 套接字 TCP UDP 相关库函数&#xff1a;socket、bind、listen、accept、send、recv、sendto、recvfrom 参考之前的文章 Linux C语言 30-套接字操作…...

微服务知识大杂烩

1.什么是微服务? 微服务(Microservices)是一种软件架构风格,将一个大型应用程序划分为一组小型、自治且松耦合的服务。每个微服务负责执行特定的业务功能,并通过轻量级通信机制(如HTTP)相互协作。每个微服务可以独立开发、部署和扩展,使得应用程序更加灵活、可伸缩和可…...

记录一次vscode markdown的图片路径相关插件学习配置过程

插件及说明查找过程 csdn搜索markdown图片路径&#xff0c;找到关于这一款插件的回答。打开vscode拓展搜索Paste Image这款插件&#xff0c;看到下载量挺高的&#xff0c;应该不赖。 点击仓库,进入该插件开源的github仓库,查看README文件阅读说明. 淡然在Vscode 插件项目下的细…...

设计原则 | 依赖转置原则

一、依赖转置原则&#xff08;DIP&#xff1a;Dependence Inversion Principle&#xff09; 1、原理 高层模块不应该依赖低层模块&#xff0c;二者都应该依赖于抽象抽象不应该依赖于细节&#xff0c;细节应该依赖于抽象 2、层次化 Booch曾经说过&#xff1a;所有结构良好的面…...

前端开发实用技巧与经验分享

导语&#xff1a;在前端开发领域&#xff0c;掌握一些实用的技巧和经验可以帮助你更高效地完成任务。本文将分享一些前端开发的实用技巧和经验&#xff0c;帮助你在工作中更好地应对各种挑战。 一、使用开发者工具进行调试和优化 熟练掌握浏览器开发者工具的使用&#xff0c;…...

推荐一款Excel快速加载SQL的插件,方便又好用

如果告诉你只需要双击一下&#xff0c;SQL数据库中存放在表里面的数据&#xff0c;就能加载到你的Excel中&#xff0c;你想不想要&#xff1f; 今天给大家推荐一款好用的Excel插件&#xff0c;安装简单&#xff0c;使用方便&#xff0c;是经常使用SQL数据库的不二。 这款插件…...

Docker快速入门(docker加速,镜像,容器,数据卷常见命令操作整理)

Docker本质是将代码所需的环境依赖进行打包运行,而在Docker中最重要的是镜像和容器 镜像:可以简单地理解为每启动一个docker镜像就会占用计算机一个进程,这个进程和另外起的docker镜像的进程是相互独立的,以数据库为例,每个镜像都会copy一份数据库,在他所在的进程中.别的镜像在…...

http和https的区别有哪些

目录 HTTP&#xff08;HyperText Transfer Protocol&#xff09; HTTPS&#xff08;HyperText Transfer Protocol Secure&#xff09; 区别与优势 应用场景 未来趋势 当我们浏览互联网时&#xff0c;我们经常听到两个常用的协议&#xff1a;HTTP&#xff08;HyperText Tra…...

使用Keil-MDK生成*.bin格式可执行文件

使用Keil-MDK生成*.bin格式可执行文件 文章目录 使用Keil-MDK生成*.bin格式可执行文件前言一、fromelf.exe工具二、使用方法1.配置输出2.输出格式 前言 在使用Keil MDK的集成开发环境中&#xff0c;默认情况下可以生成*.axf格式的调试文件和*.hex格式的可执行文件。虽然文件可…...

基于springboot+vue篮球联盟管理系统源码

&#x1f345; 简介&#xff1a;500精品计算机源码学习 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 文末获取源码 目录 一、以下学习内容欢迎交流&#xff1a; 二、文档资料截图&#xff1a; 三、项目技术栈 四、项目运行图 背景&#xff1a; 篮球运…...

分页助手入门以及小bug,报sql语法错误

导入坐标 5版本以上的分页助手 可以不用手动指定数据库语言&#xff0c;它会自动识别 <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.3.2</version> </dependency&g…...

Java中的并发编程:深入理解CountDownLatch

Java中的并发编程&#xff1a;深入理解CountDownLatch 本文将深入探讨Java中的并发编程&#xff0c;重点关注CountDownLatch的使用。通过理解这些概念和技术&#xff0c;我们可以编写出更高效、稳定的Java程序。 一、CountDownLatch简介 CountDownLatch是Java中的一个同步工具…...

Windows 安装 flash-attention 和 bitsandbytes

首先保证cuda版本为12.1&#xff0c;torch版本为2.1.0及以上&#xff0c;python版本3.10以上 从此处下载最新版的whl&#xff0c;https://github.com/jllllll/bitsandbytes-windows-webui/releases/tag/wheels&#xff0c;通过whl来安装bitsandbytes 从此处下载最新版的whl&a…...

AHB 与 DMA

AHB&#xff08;先进高性能总线&#xff09; 随着深亚微米工艺技术日益成熟&#xff0c;集成电路芯片的规模越来越大。数字IC从基于时序驱动的设计方法&#xff0c;发展到基于IP核复用的设计方法&#xff0c;并在SOC设计中得到了广泛应用。在基于IP核复用的SoC&#xff08;Syst…...

React使用echarts并且修改echarts图大小

React使用echarts 引入 npm install --save echarts-for-react npm install --save echarts使用 <ReactEChartsoption{option}notMerge{true}lazyUpdate{true}style{{"width": "100%","height": "800px"}}theme{"theme_nam…...

【Q6-30min】

1. ifndef/define/endif的作用&#xff1a;避免头文件被重复引用。 2.堆栈溢出主要的原因是&#xff1a; &#xff08;1&#xff09;函数调用层次太深。函数递归调用时&#xff0c;系统要在栈中不断保存函数调用时的现场和产生的变量&#xff0c;如果递归调用太深&#xff0c;…...

C++之类和对象(下)

目录 初始化列表 static成员 C11对于非静态成员变量初始化 友元 友元函数 友元类 总结 初始化列表 我们知道&#xff0c;在学习构造函数时&#xff0c;我们知道对象的成员变量的初始化我们是在构造函数函数体内进行初始化的&#xff0c;还有没有其它初始化成员变量的方…...

微服务开发:断路器详解

微服务是目前业界使用的最重要的实现方面。通过使用微服务架构&#xff0c;开发人员可以消除他们以前在单体应用程序中遇到的许多问题。展望未来&#xff0c;人们开始在微服务中搜索和采用各种模式。大多数时候&#xff0c;新模式的产生是为了解决另一个模式中出现的常见问题。…...

Leetcode—383.赎金信【简单】

2023每日刷题&#xff08;五十&#xff09; Leetcode—383.赎金信 实现代码 class Solution { public:int arr[26] {0};int arr2[26] {0};bool canConstruct(string ransomNote, string magazine) {int len ransomNote.size();int len2 magazine.size();for(int i 0; i …...

爬虫-xpath篇

1.xpath的基础语法 表达式描述nodename选中该元素/从根节点选取、或者是元素和元素间的过渡//从匹配选择的当前节点选择文档中的节点&#xff0c;而不考虑它们的位置.选取当前节点…选取当前节点的父节点选取属性text()选取文本 举例&#xff1a; 路径表达式结果html选择html元…...

wordpress弹幕播放器/长沙seo霜天博客

在无线路由器市场中&#xff0c;家庭网状WiFi系统在国外市场非常火热。从Eero到Starry Station&#xff0c;还有网件最新推出的Orbi无线路由器&#xff0c;都是主打家庭无线的网状网络功能。近期&#xff0c;又一款无线路由器新品横空出世&#xff0c;Ally Plus智能家庭WiFi系统…...

如何做中介网站/苏州网站关键字优化

分享一个大牛的人工智能教程。零基础&#xff01;通俗易懂&#xff01;风趣幽默&#xff01;希望你也加入到人工智能的队伍中来&#xff01;请点击http://www.captainbed.net &#xfeff;&#xfeff;You can’t change default system font of Windows 10 from settings ap…...

批量发布网站/山东服务好的seo

一.Java部分1.选择题3.关于 Java 堆&#xff0c;下面说法错误的是()。A.所有类的实例都是在堆上分配内存。B.对象所占的堆内存是由自动内存管理系统回收。C.堆内存由存活和死亡的对象&#xff0c;空闲碎片区组成。D.数组是分配在栈中的错选A -->原因:对基本概念不熟悉正确答…...

java 做直播网站有哪些软件有哪些/重庆森林讲的什么内容

Release 与 Debug 的区别就不多说了&#xff0c; 简单来说 Release 优化过&#xff0c; 性能高一些。 Debug 为方便调试。 默认情况下是 Debug, 那如何改成 Release 呢&#xff1f; 项目上右键&#xff0c;“属性”&#xff0c; 余下的如下图操作&#xff1a;...

云南火电建设有限公司网站/免费优化网站

构建 LVS-NAT 负载均衡群集 实验环境&#xff1a; 主机操作系统IP地址LVS 负载调度器CentOS 7.3 x86_64内&#xff1a;192.168.1.100 外&#xff1a;12.0.0.1web 服务器 1CentOS 7.3 x86_64192.168.1.101web 服务器 2CentOS 7.3 x86_64192.168.1.102NFS 共享储存CentOS 7.3 x86…...

外贸网站建设产品/百度官方网站登录

老板雇佣程序员来写代码&#xff0c;程序员的薪水是成本&#xff0c;产生的有效代码是产品。或者说老板从程序员那里买代码。程序员每写一行代码究竟能赚多少钱&#xff1f;不妨来推导一下。 我们规定程序员书写、重构、改bug产生的变化行数都算做生产行&#xff08;Line&#…...