「Qt Widget中文示例指南」如何创建一个计算器?(一)

Qt 是目前最先进、最完整的跨平台C++开发工具。它不仅完全实现了一次编写,所有平台无差别运行,更提供了几乎所有开发过程中需要用到的工具。如今,Qt已被运用于超过70个行业、数千家企业,支持数百万设备及应用。

本文将展示如何使用信号和槽来实现计算器小部件的功能,以及如何使用QGridLayout在网格中放置子小部件。

点击获取Qt Widget组件下载(Q技术交流:166830288)

Qt Widget中文示例指南图集

计算器示例的屏幕截图

这个例子由两个类组成:

  • Calculator是计算器小部件,具有计算器的所有功能。
  • Button是用于每个计算器按钮的小部件,它派生自QToolButton。

我们将从回顾计算器开始,然后再看看按钮。

Calculator类定义
class Calculator : public QWidget
{
Q_OBJECTpublic:
Calculator(QWidget *parent = nullptr);private slots:
void digitClicked();
void unaryOperatorClicked();
void additiveOperatorClicked();
void multiplicativeOperatorClicked();
void equalClicked();
void pointClicked();
void changeSignClicked();
void backspaceClicked();
void clear();
void clearAll();
void clearMemory();
void readMemory();
void setMemory();
void addToMemory();

Calculator类提供了一个简单的计算器小部件,它继承自QDialog,并且有几个与计算器按钮相关联的私有槽,重新实现了QObject::eventFilter()来处理计算器显示的鼠标事件。

Buttons根据其操作进行分类。例如,所有数字按钮(标记为0到9)向当前操作数追加一个数字。对于这些,我们将多个按钮连接到同一个插槽(例如,digitClicked())。类别包括数字、一元运算符(Sqrt、x²、1/x)、加法运算符(+、-)和乘法运算符(x、÷),其他按钮都有自己的插槽。

private:
template<typename PointerToMemberFunction>
Button *createButton(const QString &text, const PointerToMemberFunction &member);
void abortOperation();
bool calculate(double rightOperand, const QString &pendingOperator);

私有的createButton()函数被用作小部件构造的一部分,abortOperation()在发生除零操作或对负数进行平方根操作时调用,Calculate()应用二进制运算符(+、-、x或÷)。

double sumInMemory;
double sumSoFar;
double factorSoFar;
QString pendingAdditiveOperator;
QString pendingMultiplicativeOperator;
bool waitingForOperand;

这些变量与计算器显示的内容(QLineEdit)一起编码计算器的状态:

  • sumInMemory包含存储在计算器内存中的值(使用MS、M+或MC)。
  • sumSoFar存储到目前为止累积的值,当用户单击=时,sumSoFar被重新计算并显示在显示器上,Clear All将sumSoFar重置为零。
  • factorSoFar在进行乘法和除法运算时存储一个临时值。
  • pendingAdditiveOperator存储用户单击的最后一个添加操作符。
  • pendingMultiplicativeOperator存储用户单击的最后一个乘法运算符。
  • 当计算器期望用户开始输入操作数时,waitingForOperand为true。

加法运算符和乘法运算符的处理方式不同,因为它们具有不同的优先级。例如,1 + 2 ÷ 3被解释为1 + (2 ÷ 3),因为÷的优先级高于+。

下表显示了当用户输入数学表达式时计算器状态的演变。

Qt Widget中文示例指南图集

一元操作符,如Sqrt,不需要特殊处理;它们可以立即应用,因为在单击操作符按钮时已经知道操作数。

QLineEdit *display;enum { NumDigitButtons = 10 };
Button *digitButtons[NumDigitButtons];
};

最后,声明与显示和用于显示数字的按钮相关联的变量。

Qt Widget组件推荐
  • QtitanRibbon - Ribbon UI组件:是一款遵循Microsoft Ribbon UI Paradigm for Qt技术的Ribbon UI组件,QtitanRibbon致力于为Windows、Linux和Mac OS X提供功能完整的Ribbon组件。
  • QtitanChart - Qt类图表组件:是一个C ++库,代表一组控件,这些控件使您可以快速地为应用程序提供漂亮而丰富的图表。
  • QtitanDataGrid - Qt网格组件:提供了一套完整的标准 QTableView 函数和传统组件无法实现的独特功能。使您能够将不同来源的各类数据加载到一个快速、灵活且功能强大的可编辑网格中,支持排序、分组、报告、创建带状列、拖放按钮和许多其他方便的功能。
  • QtitanDocking:允许您像 Visual Studio 一样为您的伟大应用程序配备可停靠面板和可停靠工具栏。黑色、白色、蓝色调色板完全支持 Visual Studio 2019 主题!

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

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

相关文章

45.120.101.X 如何找出网站建设中弱点和漏洞

漏洞扫描服务&#xff08;Vulnerability Scan Service&#xff09;集Web漏洞扫描、操作系统漏洞扫描、资产内容合规检测、配置基线扫描、弱密码检测五大核心功能&#xff0c;自动发现网站或服务器在网络中的安全风险&#xff0c;为云上业务提供多维度的安全检测服务&#xff0c…

再谈谈注解

作者简介&#xff1a;大家好&#xff0c;我是smart哥&#xff0c;前中兴通讯、美团架构师&#xff0c;现某互联网公司CTO 联系qq&#xff1a;184480602&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗互联网寒冬 注解&#xff0c;和反射…

成都瀚网科技有限公司抖音带货靠谱么

近年来&#xff0c;随着社交媒体的兴起&#xff0c;越来越多的企业开始利用抖音等短视频平台进行产品推广和销售。成都瀚网科技有限公司也紧跟潮流&#xff0c;通过抖音平台进行带货。那么&#xff0c;成都瀚网科技有限公司的抖音带货靠谱么&#xff1f;本文将从以下几个方面进…

网站监控的重要性及实施策略

随着互联网的快速发展&#xff0c;网站已经成为企业和个人不可或缺的在线服务平台。然而&#xff0c;网站的安全性和稳定性一直是企业及个人非常关注的问题。一旦网站出现故障或者被攻击&#xff0c;将会给企业和个人带来严重的损失。因此&#xff0c;实施有效的网站监控策略对…

Node.js之Buffer(缓冲器)

Buffer的概念 Buffer 是一个类似于数组的 对象&#xff0c;用于表示固定长度的字节序列 Bufer 本质是一段内存空间&#xff0c;专门用来处理 二进制数据。 Buffer创建方法 // 1.alloc let buf1 Buffer.alloc(10) // 使用alloc创造buffer的方法 是一个二进制类 都会归零 cons…

为什么 Django 后台管理系统那么“丑”?

哈喽大家好&#xff0c;我是咸鱼 相信使用过 Django 的小伙伴都知道 Django 有一个默认的后台管理系统——Django Admin 它的 UI 很多年都没有发生过变化&#xff0c;现在看来显得有些“过时且简陋” 那为什么 Django 的维护者却不去优化一下呢&#xff1f;原文作者去询问了多…

如何选择合适的域名注册商?需要考虑哪些方面因素?

随着互联网的快速发展&#xff0c;涌现出大大小小的众多域名注册服务商&#xff0c;但这些域名注册服务商在技术、服务、价格等方面参差不齐&#xff0c;给域名注册者带来了很多困扰。那么该如何选择合适的域名注册商呢&#xff1f;选择域名注册商需要考虑哪些方面呢&#xff1…

RT-DETR手把手教程,注意力机制如何添加在网络的不同位置进行创新优化

&#x1f4a1;&#x1f4a1;&#x1f4a1;本文独家改进&#xff1a;本文首先复现了将EMA引入到RT-DETR中&#xff0c;并跟不同模块进行结合创新&#xff1b;1&#xff09;Rep C3结合&#xff1b;2&#xff09;直接作为注意力机制放在网络不同位置&#xff1b;3&#xff09;高效…

django DRF认证组件示例

一、学习DRF的认证类&#xff1b; 设计&#xff1a;LoginView不登录就可以访问&#xff0c;UserView和OrderView需要通过认证后才能访问&#xff1b; 1、urls.py urlpatterns [path(login/, views.LoginView.as_view()),path(user/, views.UserView.as_view()),path(order/,…

mysql8.0英文OCP考试第131-140题

Q131.You have upgraded the MySQL binaries from 5.7.28 to 8.0.18 by using an in-place upgrade. Examine the message sequence generated during the first start of MySQL 8.0.18: 。。。[System]。。。/usx/sbin/mysqld (mysqld 8.0.18-commercial) starting as proces…

女儿冬天的第一件羽绒服,这也太好看了

分享女儿的时尚穿搭 撞色插肩款羽绒服 同色系的精彩碰撞 描绘出绚烂的色彩 走在街上就是最靓的崽 显肤色显瘦超吸睛 妥投时尚小潮人一枚

如何将图片转为excel或word?(客户端)

演示软件&#xff1a;金鸣表格文字识别大师3.6.1&#xff08;新版本界面可能会略有不同&#xff09; 第一部分 将图片转为excel或文表混合的word 一般的软件要将图片转为可编辑的excel&#xff0c;都需要待识别的图片要有明显清晰的表格线&#xff0c;但我们程序现已克服了这…

Java和 JS 的10大不同之处,你清楚吗?

还记得刚开始学习编程时&#xff0c;我就在想&#xff1a;“Java和JavaScript是同一种语言吗&#xff1f;”。就是因为看到它们名称中都带“java”&#xff0c;所以才会误以为它们有关系。实际上&#xff0c;它们并没有太大的联系。 这两者的关系&#xff0c;就和英语与斯瓦希…

【数据结构】图的存储结构(邻接矩阵)

一.邻接矩阵 1.图的特点 任何两个顶点之间都可能存在边&#xff0c;无法通过存储位置表示这种任意的逻辑关系。 图无法采用顺序存储结构。 2.如何存储图&#xff1f; 将顶点与边分开存储。 3.邻接矩阵&#xff08;数组表示法&#xff09; 基本思想&#xff1a; 用一个一维数…

jenkins-2.426.1-1.1.noarch.rpm 的公钥没有安装

执行命令 yum install jenkins 报错 jenkins-2.426.1-1.1.noarch.rpm 的公钥没有安装 下载的软件包保存在缓存中&#xff0c;直到下次成功执行事务。 您可以通过执行 yum clean packages 删除软件包缓存。 错误&#xff1a;GPG 检查失败 解决办法&#xff1a; 1、安装新的公…

『C++成长记』类和对象

&#x1f525;博客主页&#xff1a;小王又困了 &#x1f4da;系列专栏&#xff1a;C &#x1f31f;人之为学&#xff0c;不日近则日退 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、类的引入 二、类的定义 三、类的访问限定符 四、类的作用域 五、类的实例化…

用于神经网络的FLOP和Params计算工具

用于神经网络的FLOP和Params计算工具 1. FlopCountAnalysis pip install fvcoreimport torch from torchvision.models import resnet152, resnet18 from fvcore.nn import FlopCountAnalysis, parameter_count_tablemodel resnet152(num_classes1000)tensor (torch.rand(1…

vue-waterfall2 实现瀑布流,及总结的问题

注意&#xff1a;引入需要在主界面引入&#xff0c;直接在组件中引用会有问题 1.安装 npm install vue-waterfall21.8.20 --save &#xff08;提示&#xff1a;一定要安装1.8.20&#xff0c;最新版会有一部分问题&#xff09; 2.打开main.js文件 import waterfall from v…

微服务实战系列之Gateway

前言 人类世界自工业革命以来&#xff0c;无论从金融、货币、制度&#xff0c;还是科技、资源、社会各个方面&#xff0c;都发生了翻天覆地的变化。物质极大丰富&#xff0c;从而也推动了科技的极速发展。当计算机问世也仅仅不到80年&#xff0c;而如今我们的生活中处处有它的影…

云原生Docker系列 | Docker私有镜像仓库公有镜像仓库使用

云原生Docker系列 | Docker私有镜像仓库&公有镜像仓库使用 1. 使用公有云镜像仓库1.1. 阿里云镜像仓库1.2. 华为云镜像仓库1.3. 腾讯云镜像仓库2. 使用Docker Hub镜像仓库3. 使用Harbor构建私有镜像仓库4. 搭建本地Registry镜像仓库1. 使用公有云镜像仓库 1.1. 阿里云镜像…