Qt多功能计算器(三)

您所在的位置:网站首页 计算器16进制转换成十进制 Qt多功能计算器(三)

Qt多功能计算器(三)

2023-07-26 20:19| 来源: 网络整理| 查看: 265

项目介绍

在这里插入图片描述 本篇文章的内容是计算器的第三个功能——进制转换,这个功能相比上一个功能——三角函数的实现略微困难一些。程序的逻辑从理论上说只要修改界面和部分槽函数就可以实现2-36任意进制互相转换,这里只实现了二进制(bin)、八进制(oct)、十进制(dec)、十六进制(hex)的互相转换。

界面设计

这是界面的设计图: 在这里插入图片描述

控件描述控件名称输入框inputText输出框outputText输入二进制binI输出二进制binO输入八进制octI输出八进制octO输入十进制decI输出十进制decO输入十六进制hexI输出十六进制hexO转换按钮btnChange 控件名称信号函数槽函数槽函数参数binIQRadioButton::clicked()baseChange::baseRadioChanged()QString “I”, QString “bin”octIQRadioButton::clicked()baseChange::baseRadioChanged()QString “I”, QString “oct”decIQRadioButton::clicked()baseChange::baseRadioChanged()QString “I”, QString “dec”hexIQRadioButton::clicked()baseChange::baseRadioChanged()QString “I”, QString “hex”binOQRadioButton::clicked()baseChange::baseRadioChanged()QString “O”, QString “bin”octOQRadioButton::clicked()baseChange::baseRadioChanged()QString “O”, QString “oct”decOQRadioButton::clicked()baseChange::baseRadioChanged()QString “O”, QString “dec”hexOQRadioButton::clicked()baseChange::baseRadioChanged()QString “O”, QString “hex”btnChangeQPushButton::clicked()baseChange::changeBtnPushed()None //baseChange.h void baseRadioChanged(QString io, QString base); void changeBtnPushed(); //baseChange.cpp connect(ui->binI,&QRadioButton::clicked,this,[=]{baseChange::baseRadioChanged("I","bin");}); connect(ui->octI,&QRadioButton::clicked,this,[=]{baseChange::baseRadioChanged("I","oct");}); connect(ui->decI,&QRadioButton::clicked,this,[=]{baseChange::baseRadioChanged("I","dec");}); connect(ui->hexI,&QRadioButton::clicked,this,[=]{baseChange::baseRadioChanged("I","hex");}); connect(ui->binO,&QRadioButton::clicked,this,[=]{baseChange::baseRadioChanged("O","bin");}); connect(ui->octO,&QRadioButton::clicked,this,[=]{baseChange::baseRadioChanged("O","oct");}); connect(ui->decO,&QRadioButton::clicked,this,[=]{baseChange::baseRadioChanged("O","dec");}); connect(ui->hexO,&QRadioButton::clicked,this,[=]{baseChange::baseRadioChanged("O","hex");}); connect(ui->btnChange,&QPushButton::clicked,this,[=]{baseChange::changeBtnPushed();}); 界面逻辑 baseRadioChanged()函数 void baseChange::baseRadioChanged(QString io, QString base) { if(io == "I"){ inputBase = base; } else{ outputBase = base; } }

处理单选框内容被更改的事件,将对应全局变量赋值为对应的进制。

changeBtnPushed()函数 void baseChange::changeBtnPushed() { ui->outputText->setText(""); int number; int base; QString result; bool isChangeSuccessful; if(inputBase == "bin"){ base = 2; } else if(inputBase == "oct"){ base = 8; } else if(inputBase == "dec"){ base = 10; } else{ base = 16; } number = ui->inputText->text().toInt(&isChangeSuccessful,base); if(isChangeSuccessful){ if(outputBase == "bin"){ result = QString("%1").arg(number,0,2); } else if(outputBase == "oct"){ result = QString("%1").arg(number,0,8); } else if(outputBase == "dec"){ result = QString("%1").arg(number,0,10); } else{ result = QString("%1").arg(number,0,16); } ui->outputText->setText(result); } else{ QMessageBox::information(NULL,"提示","请输入正确的数字"); } }

在转换按钮被按下后,在输出框显示对应的值。 在这里插入图片描述

知识整理 QString::toInt()函数

在发现这个进制转换方法之前,我尝试过在字符串的前面加进制前缀以及使用格式化符进行格式化(QString似乎只支持一部分格式化符)。通过看官方文档,我了解到了这个方法。 原文 在这里插入图片描述 翻译 int QString::toInt(bool *ok= nullptr, int base = 10) const 返回被转换成目标进制base的字符串,目标进制默认是10,而且在2和36之间(包括2和36),或者0。如果转换错误,会返回0。 如果nullptr参数指向的是布尔型变量ok,转换失败时,ok的值会变成false,反之,转换成功时,ok的值会变成true。 如果base参数的值是0,C语言的规则会被使用:如果字符串以"0x"开头,将会被当作16进制数处理;如果字符串以"0"开头,将会被当作8进制数处理;如果没有前缀,将会被当作十进制数处理。 字符串的转换经常会发生在C语言的环境下。对于依赖于语言环境的转换,使用QLocale::toInt()。 示例:

str = "FF"; bool ok; int hex = str.toInt(&ok, 16); // hex == 255, ok == true int dec = str.toInt(&ok, 10); // dec == 0, ok == false

这个函数忽略字符串前后两端的空格。

如果翻译有些问题,请见谅,我只是一个初中生,看不懂的内容都是意译的。

QString格式化

QTextEdit在设置文字时不支持格式化,所以需要在设置之前格式化。

QString string = QString("%1").arg(number, 0, base) //%1是字符串格式化符号 //number: 插入字符串的数字 //0: 数字最大长度,0表示不限制长度 //base: 数字的目标进制

代码地址



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3