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♪(・ω・)ノ 🍇。

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

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

相关文章

业务编码生成规则

在开发中&#xff0c;咱们有很多时候需要自定义编码&#xff0c;而不是使用uuid或者是自增ID。 本章就介绍一个自定义业务编码的生成规则。 import lombok.AllArgsConstructor; import lombok.Getter;/*** author: mcs* Date: 2022/11/27 10:00* Description: 业务编码类型及其…

力扣labuladong——一刷day53

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、力扣1485. 克隆含随机指针的二叉树二、力扣1490. 克隆 N 叉树三、力扣133. 克隆图四、力扣138. 随机链表的复制 前言 复制带有随机指针的二叉树或者链表&am…

Java 文件常用操作与流转换

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall &#x1f343; vue3-element-admin &#x1f343; youlai-boot &#x1f33a; 仓库主页&#xff1a; Gitee &#x1f4ab; Github &#x1f4ab; GitCode &#x1f496; 欢迎点赞…

正向代理和反向代理

正向代理和反向代理是常用的代理方式。 正向代理是代理服务器为客户端&#xff08;如浏览器&#xff09;提供服务。一般来说&#xff0c;客户端发起请求&#xff0c;请求会被代理服务器所截获&#xff0c;代理服务器向目标服务器发送请求&#xff0c;目标服务器将响应发送给代…

Java基础之注解

Java基础之注解 一、Java注解1.1、内置注解1.2、元注解1.3、自定义注解 一、Java注解 注解&#xff08;Annotation&#xff09;是一种为程序代码提供元数据&#xff08;metadata&#xff09;的方式。注解提供了关于程序代码的额外信息&#xff0c;这些信息可以在运行时或编译时…

前端项目部署自动检测更新后通知用户刷新页面(前端实现,技术框架vue、js、webpack)——方案一:编译项目时动态生成一个记录版本号的文件

前言 当我们重新部署前端项目的时候&#xff0c;如果用户一直停留在页面上并未刷新使用&#xff0c;会存在功能使用差异性的问题&#xff0c;因此&#xff0c;当前端部署项目后&#xff0c;需要提醒用户有去重新加载页面。 技术框架 vue、js、webpack 解决方案 编译项目时动…

GPS北斗对时服务(时间同步系统)电力变电站应用方案

GPS北斗对时服务&#xff08;时间同步系统&#xff09;电力变电站应用方案 GPS北斗对时服务&#xff08;时间同步系统&#xff09;电力变电站应用方案 1.概述 在现代电网中&#xff0c;统一的时间系统对于电力系统的故障分析、监视控制及运行管理具有重要意义。变电站的对时是指…

GEE——利用Landsat C02 T1_L2数据进行某研究区的长时序(1985-2023年)NDVI和FVC计算

本教程的主要目的是在2022年底GEE已经不提供LandsatC01数据,所以这里给大家提供数据质量更高的C02数据集,这样我们就可以更快的切换过来。本教程主要目的就是实现NDVI和FVC长时序的计算,从而看某个区域的时空变化特特征。 数据介绍 Landsat C02 T1_L2数据是Landsat 8卫星(…

内网隧道学习

默认密码&#xff1a;hongrisec2019 一.环境搭建 网卡学习 一个网卡一个分段&#xff0c;想象成一个管道 192.168.52一段 192.168.150一段 仅主机模式保证不予外界连通&#xff0c;保证恶意操作不会跑到真实机之上 52段是内部通信&#xff0c;150段属于服务器&#xff08;…

数据结构 / 结构体指针

1. 格式 struct 结构体名{数据类型 成员1;数据类型 成员2; .... };struct 结构体名 *指针变量名 2. 结构体指针指向普通变量的地址 struct CAR{char name[10];int price; };struct CAR car{"byd",160}; struct CAR *p&car; //p是指向结构体变量car的指针// p…

使用重试和回退机制确保 Spring 微服务中的 API 弹性

在当今的数字环境中&#xff0c;应用程序严重依赖外部 HTTP/REST API来实现各种功能。这些 API 通常会编排复杂的内部和外部 API 调用网络。这创建了一个依赖网络。因此&#xff0c;当依赖的 API 发生故障或停机时&#xff0c;面向主要应用程序的 API 需要熟练、优雅地处理这些…

实验五 键盘按键与数码管显示(汇编与微机原理)

键盘按键与数码管显示 实验目的&#xff1a; 熟悉星研集成开发环境&#xff0c;掌握微机接口程序编写调试的基本方法。 掌握矩阵式键盘的工作原理及识别键盘按键的方法。 掌握8段数码管显示数字或字符的工作原理和它的使用方法。 掌握用8255扫描键盘及用8255刷新数码管显示…

优秀的员工成为公司的管理者之后,为何表现平庸?因为他们缺乏这些思维

在企业的实践中&#xff0c;我们发现平时能力最强的员工&#xff0c;在被提拔到管理层之后就慢慢变得平庸了&#xff0c;再也不是以前那个无所不能的“企业能人”了&#xff0c;甚至在一些事情的处理上还会有些笨拙。面对这种情况&#xff0c;我们一定会感觉很疑惑&#xff0c;…

Eclipse和Intellij IDEA的格式化代码快捷键

Eclipse和Intellij IDEA的格式化代码快捷键 eclipse的格式化快捷键是 Windows/Linux: Ctrl Shift F Mac: Cmd Shift F 按下这个组合键将会对当前编辑的代码进行格式化&#xff0c;使其符合你在Eclipse配置中定义的代码样式规范。你可以在Eclipse的偏好设置中配置代码格式化…

PC8231(CC/CV)5V/2.4A同步降压芯片 频率可调 限流欠压补偿

一&#xff0e;概述 PC8231 是一款同步降压转换器&#xff0c; 该转换器可驱动输出 2.4A 负载电流。 设计允许 PC8231 在 9V 到40V 宽输入电压范围内工作。通过将 COMP/EN 引脚逻辑电平拉低来实现外部关断功能&#xff0c;并进入待机模式。外部补偿使反馈控制环路具有良好的线…

JavaScript 原型,原型链的特点

JavaScript 的原型&#xff08;Prototype&#xff09;和原型链&#xff08;Prototype chain&#xff09;是 JavaScript 面向对象编程中的重要概念。 原型&#xff08;Prototype&#xff09; 在 JavaScript 中&#xff0c;每个对象都有一个原型对象&#xff0c;而这个原型对象…

CRM的智能招投标对企业有什么意义?

如今CRM系统的生态系统越来越壮大&#xff0c;这些工具的集成极大地丰富了CRM系统的应用场景&#xff0c;例如CRM系统集成企业微信等社交媒体为获客提供便利&#xff1b;再比如CRM集成ChatGPT提高邮件内容质量&#xff0c;对于经常接触招投标项目的业务人员来说&#xff0c;在C…

英特尔工作站:助力专业用户实现高效创作

原创 | 文 BFT机器人 英特尔工作站是由全球知名的英特尔公司设计和开发的一款计算平台。英特尔在工作站处理器领域将其产品分为性能型和移动型两类&#xff0c;它的诞生旨在满足专业用户在科学、工程、设计等领域对高性能计算的需求。英特尔工作站配备了最新的英特尔处理器、大…

EI期刊论文复现:考虑电动汽车可调度潜力的充电站两阶段市场投标策略程序代码!

本程序代码参考EI期刊论文《考虑电动汽车可调度潜力的充电站两阶段市场投标策略》&#xff0c;程序中基于历史数据评估可调度潜力&#xff0c;由联合报价模型确定节点边际电价&#xff0c;作为报价的参考&#xff0c;包含个体竞价模式&#xff0c;纳什博弈竞价&#xff0c;算例…

docker (简介、dcoker详细安装步骤)- day01

一、 为什么出现 Docker是基于Go语言实现的云开源项目。 Docker的主要目标是“Build&#xff0c;Ship and Run Any App,Anywhere”&#xff0c;也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理&#xff0c;使用户的APP&#xff08;可以是一个WEB应用或数据库应…