申请企业资助建设网站/seo优化技术培训中心
在 C++ 中实现一个简单的图形用户界面(GUI)应用
图形用户界面(GUI)应用程序是现代软件开发中不可或缺的一部分。它们为用户提供了直观的交互方式,使得操作更加简单和高效。本文将介绍如何在 C++ 中实现一个简单的 GUI 应用程序,使用流行的 GUI 库 Qt。我们将创建一个基本的计算器应用程序,支持加法、减法、乘法和除法等基本功能。
一、项目概述
我们的目标是创建一个简单的计算器应用程序,具有以下功能:
- 用户可以输入两个数字。
- 用户可以选择加法、减法、乘法或除法。
- 显示计算结果。
1.1 技术栈
- C++11 或更高版本
- Qt 5 或更高版本(包括 Qt Widgets 模块)
二、环境准备
在开始之前,请确保您的开发环境已准备好。您需要安装 Qt 开发环境,可以从 Qt 官网 下载并安装 Qt Creator。
三、创建 Qt 项目
3.1 创建新项目
- 打开 Qt Creator,选择“新建项目”。
- 选择“Qt Widgets Application”,点击“选择”。
- 输入项目名称和位置,点击“下一步”。
- 选择合适的 Qt 版本和构建套件,点击“下一步”。
- 点击“完成”以创建项目。
3.2 设计用户界面
在 Qt Creator 中,打开 mainwindow.ui
文件,使用拖放方式设计用户界面。我们需要以下组件:
- 两个
QLineEdit
用于输入数字。 - 四个
QPushButton
用于加法、减法、乘法和除法。 - 一个
QLabel
用于显示结果。
将这些组件放置在窗口中,并设置合适的名称和文本。
四、实现功能
4.1 连接信号与槽
在 Qt 中,信号和槽机制用于处理事件。我们需要将按钮的点击事件连接到相应的槽函数。打开 mainwindow.cpp
文件,添加以下代码:
#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);// 连接按钮的点击信号到槽函数connect(ui->addButton, &QPushButton::clicked, this, &MainWindow::add);connect(ui->subtractButton, &QPushButton::clicked, this, &MainWindow::subtract);connect(ui->multiplyButton, &QPushButton::clicked, this, &MainWindow::multiply);connect(ui->divideButton, &QPushButton::clicked, this, &MainWindow::divide);
}MainWindow::~MainWindow()
{delete ui;
}
4.2 实现计算功能
接下来,我们需要实现加法、减法、乘法和除法的功能。添加以下槽函数到 mainwindow.cpp
文件中:
void MainWindow::add() {double num1 = ui->lineEdit1->text().toDouble();double num2 = ui->lineEdit2->text().toDouble();double result = num1 + num2;ui->resultLabel->setText(QString::number(result));
}void MainWindow::subtract() {double num1 = ui->lineEdit1->text().toDouble();double num2 = ui->lineEdit2->text().toDouble();double result = num1 - num2;ui->resultLabel->setText(QString::number(result));
}void MainWindow::multiply() {double num1 = ui->lineEdit1->text().toDouble();double num2 = ui->lineEdit2->text().toDouble();double result = num1 * num2;ui->resultLabel->setText(QString::number(result));
}void MainWindow::divide() {double num1 = ui->lineEdit1->text().toDouble();double num2 = ui->lineEdit2->text().toDouble();if (num2 != 0) {double result = num1 / num2;ui->resultLabel->setText(QString::number(result));} else {ui->resultLabel->setText("Error: Division by zero");}
}
4.3 更新头文件
确保在 mainwindow.h
文件中声明这些槽函数:
private slots:void add();void subtract();void multiply();void divide();
五、编译与运行
5.1 编译项目
在 Qt Creator 中,点击左上角的“构建”按钮,编译项目。如果没有错误,您将看到编译成功的消息。
5.2 运行项目
点击“运行”按钮,启动应用程序。您将看到一个简单的计算器界面,您可以输入数字并进行计算。
六、扩展功能
在实现了基本的计算器功能后,您可以考虑添加以下扩展功能:
- 历史记录:记录用户的计算历史,并在界面中显示。
- 更多运算:支持平方、平方根、指数等更多数学运算。
- 输入验证:添加输入验证,确保用户输入有效的数字。
- 主题支持:实现不同的主题,允许用户选择界面的外观。
七、注意事项
- 内存管理:Qt 使用智能指针和父子关系来管理内存,确保避免内存泄漏。
- 跨平台兼容性:Qt 是跨平台的,但在不同操作系统上可能会有细微差别,需进行适当的适配。
- 性能优化:对于复杂的 GUI 应用,考虑使用多线程来处理耗时操作,避免界面卡顿。
八、总结
本文介绍了如何在 C++ 中使用 Qt 实现一个简单的图形用户界面(GUI)应用程序。通过创建一个基本的计算器,我们学习了如何设计用户界面、处理用户输入和实现功能。希望您能在此基础上进行扩展,构建更复杂的 GUI 应用程序。GUI 开发不仅能提高我们的编程能力,还能帮助我们更好地理解用户体验和交互设计的原则。
相关文章:

在 C++ 中实现一个简单的图形用户界面(GUI)应用
在 C 中实现一个简单的图形用户界面(GUI)应用 图形用户界面(GUI)应用程序是现代软件开发中不可或缺的一部分。它们为用户提供了直观的交互方式,使得操作更加简单和高效。本文将介绍如何在 C 中实现一个简单的 GUI 应用…...

如何编写一个CMakeLists.txt文件(由简到难,较详细)
在Linux系统下,经常使用CMakeLists.txt文件来链接、编译C工程,大部分人clone的代码里都是有CMakeLists.txt文件的,只需要cmake .. 和make就完事了,但在工作中,你必须要有从无到有编写CMakeLists.txt文件的能力。 一、…...

数据结构----链表
一丶概念 链表又称单链表、链式存储结构,用于存储逻辑关系为“一对一”的数据。 和顺序表不同同,使用链表存储数据,不强制要求数据在内存中集中存储,各个元素可以分散存储在内存中。 二丶特点 特点:内存不连续…...

【Qt】内置对话框
一.Qt内置对话框 Qt 提供了多种可复⽤的对话框类型,即 Qt 标准对话框。Qt标准对话框全部继承于QDialog类。常⽤标准对话框如下: 二.内置对话框分类 1.消息对话框 QMessageBox 1.1 概念 消息对话框是应⽤程序中最常⽤的界⾯元素。消息对话框主要⽤于为…...

excel常规操作
一、去重 IF(COUNTIF($D$1:D2,D2)>1,"",C2) —— D是去重的列 二、不同列匹配 VLOOKUP(A1,E:F,2,0) vlookup(查找值, 查找区域, 返回查找区域的第几列数据, 精确查找输入参数"0"or"false" 或 模糊查找输入参数"1"or"true…...

uniapp webview子页面向父页面发送数据和触发事件,重点在第3条!!!
1、众所周知H5中iframe可以用过postmessage进行,从H5子页面向H5父页面进行通信。方法如下: // 子页面 window.parent.postMessage({ data: 你的消息 }, *);// 父页面 <iframe src"xxxxxxxxxxx"></iframe> window.addEventListene…...

【STM32实物】基于STM32+ESP32+手机APP设计的智能宠物喂食系统实物源码原理图PCB设计文档演示视频——(文末工程资料下载)
基于STM32+ESP32+手机APP设计的智能宠物喂食系统 演示视频 基于STM32+ESP32+手机APP设计的智能宠物喂食系统 摘 要 近年来,宠物在人们生活中越来越不可或缺,给人们带来的陪伴和快乐。然而,由于种种原因,主人不能时刻照顾宠物的饮食,所以宠物喂食装置变得尤为重要。传…...

EMC学习笔记5——辐射骚扰发射
辐射骚扰发射是基本的实验项目,目的是检验设备在工作时有没有产生意外的过强电磁辐射。 例如发电机,在工作时会产生意外的电磁波辐射,因为电子设备中隐藏了一些天线,这些隐藏的天线在辐射电磁波。 一、两种基本的天线结构 如前面…...

深入理解浏览器解析机制和XSS向量编码
基础部分 1.<a href"%6a%61%76%61%73%63%72%69%70%74:%61%6c%65%72%74%28%31%29">aaa</a> <a>标签可以识别,但是解析不了, 是在协议的编码顺序上,先认协议 URL 编码 "javascript:alert(1)" 2.<a …...

winform 大头针实现方法——把窗口钉在最上层
平时我们再使用成熟的软件的时候,会发现有个大头针的功能挺不错的。就是点一下大头针,窗口就会钉住,一直保持在最上面一层,这样可以一边设置参数,一边观察这个窗口里面的变化,比较方便。下面我就来简单实现…...

中间件|day1.Redis
Redis 定义 Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings), 散列(hash…...

PMP到底有什么用?
PMP 就是项目管理证书,全称是项目管理专业人士资格认证,对于一个在项目管理岗位混迹五年的老油条来说,PMP 证书是敲开项目管理岗位的第一块砖,每年考 PMP 的人都很多,要是 PMP 证书没有价值,还会有那么多人…...

apache huidi 时间旅行Time Travel)机制
Apache Hudi(Hadoop Upserts Deletes and Incrementals)是一个数据管理框架,它帮助你高效地管理存储在分布式存储系统(如HDFS或云存储)上的大型数据集。其一个关键特性是“时间旅行”,这允许你在特定时间点查询数据的历史版本。 什么是Apache Hudi中的时间旅行? Apach…...

Python 数据可视化,怎么选出合适数据的图表
数据可视化最佳实践 1. 引言:为什么数据可视化最佳实践很重要 数据可视化是数据分析和决策过程中不可或缺的一部分。通过有效的可视化,复杂的数据可以转化为易于理解的信息,从而帮助观众快速做出正确的判断。然而,糟糕的可视化可…...

c# 元组
文章目录 元组的定义元组的使用示例使用场景创建一个列表 在 C# 中,元组(Tuple)是一种用于存储多个值的数据结构,它可以方便地将不同类型的多个值打包在一起。元组在 C# 7.0 及更高版本中得到了增强,允许更方便地创建和…...

自定义注解
目录 使用注解定义分布式锁 Aop例子 retention 表示在什么时候可以用,runtime表示在运行期可以用 target表示可以用在哪些上面 inherited表示可以被继承 切点和切面类 重点是 pjp.proceed(args) 这个就是执行目标方法,下面的这一段没啥意思 也可…...

报错:Can‘t find Python executable “python“, you can set the PYTHON env variable
将项目导入vscode,执行npm install命令后,报错了,报错的信息是node-sass安装失败,同时提示需要python环境的错误信息,这是因为安装node-sass失败了,而node-sass依赖于Python环境。 1.报错:Cant find Python…...

C++中的错误处理机制
异常的引出 如过你写过不少的程序的话,相信你应该遇到过一些程序所不能处理的错误而导致程序崩溃的问题吧,比如说:操作野指针,访问空指针,函数的除零错误,数组越界,在栈上开辟空间过大导致栈溢…...

【杂乱笔记】图论
图论 文章目录 图论图的存储与深度、广度遍历基础定义代码实现其他补充 并查集基础定义代码实现 最小生成树基础定义代码实现**Kruskal算法**prim算法 拓扑排序基础定义思路分析代码实现 最短路径基础定义代码实现Dijkstra算法Bellman-Ford算法Floyd算法 图的存储与深度、广度遍…...

pdf文件密码忘记,有办法可以打开pdf文件吗?
为确保PDF文件的重要信息不轻易外泄,我们一般会给pdf文件设置打开密码,确保pdf文件的隐私与安全,但随着时间的推移,让我们遗忘了原本设置的密码,这时我们该怎么办呢? 当大家遇到这种情况时,可能…...

git , nvm 快速下载安装包链接
为了记录地址 , 都是复制大神的 , 可以用!!! nvm 包管理工具 和 git安装包 1. nvm https://www.jianshu.com/p/13c0b3ca7c71 https://blog.csdn.net/i_for/article/details/135060019 https://www.cnblogs.com/Fooo/p…...

TongHttpServer安装部署
TongHttpServer安装部署 毫无背景不是你堕落的理由,而更应该是你前进的动力。你该花时间思考,如何打好一副烂牌;而不是抱怨命运,或者干脆撕牌。 部署环境 TongHttpServer V6.0是一款轻量级负载均衡软件,支持 0SI 四层…...

Robot Operating System——操纵杆反馈
大纲 应用场景定义字段解释 案例 sensor_msgs::msg::JoyFeedback 是 ROS (Robot Operating System) 中的一个消息类型,用于表示操纵杆(如游戏手柄或飞行摇杆)的反馈信息。它通常用于传输和处理操纵杆的振动、LED状态等反馈信息。 应用场景 机…...

nginx相关博客
nginx变量 NGINX脚本语言原理及源码分析(一):开源Web服务提供商 - NGINX开源社区 NGINX 脚本语言原理及源码分析(二):开源Web服务提供商 - NGINX开源社区...

字符串及转义字符
字符串 在c语言中 形如‘a ’b ‘c 等单个字母被命名为字符常量 而形如“abcdef”等则被命名为字符串 在c语言中,有整形,单精度浮点数,字符数据类型 但却没有字符串类型 所以在初始化字符串时与初始化字符相同 列:char c…...

软考学习笔记(0):软考准备
文章目录 前言软考的优点软考项目的选择资料选择时间安排 前言 最近因为某些原因,我又开始上班了。新工作是纯内网开发,那以后发博客的频率我估计就会很少了。 软考的优点 简单来说,软考考上了,大概一个月的薪资可以涨1000-300…...

Leetcode 70.爬楼梯
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 示例 1: 输入:n 2 输出:2 解释:有两种方法可以爬到楼顶。 1. 1 阶 1 阶 2. 2 阶 示例 2&#…...

Spring Boot集成钉钉群通知机器人
文章目录 一、钉钉机器人配置1)添加机器人2)添加自定义机器人3)设置机器人参数4)添加机器人完成 二、依赖导入三、工具类封装四、关键字推送消息测试类1)测试类2)程序输出结果:3)通知…...

SpringAOP 面向切面编程
** Spring有两大核心特性:IOC(控制反转) 和 AOP(面向切面编程),但是 相比IOC在日常工作中的广泛应用,AOP却常常做了冷板凳,下面我从工作中的场景为大家打开AOP面向切面编程的大门。** 什么是AOP? 在软件业,AOP为Asp…...

灵办AI助手Chrome插件全面评测:PC Web端的智能办公利器
探索灵办AI助手在Mac OS上的高效表现,支持多款主流浏览器,助你轻松应对办公挑战 文章目录 探索灵办AI助手在Mac OS上的高效表现,支持多款主流浏览器,助你轻松应对办公挑战摘要引言开发环境介绍核心功能评测1. 网页翻译与双语对照 …...