admin管理员组文章数量:1794759
Qt多功能计算器(三)——进制转换
项目介绍
本篇文章的内容是计算器的第三个功能——进制转换,这个功能相比上一个功能——三角函数的实现略微困难一些。程序的逻辑从理论上说只要修改界面和部分槽函数就可以实现2-36任意进制互相转换,这里只实现了二进制(bin)、八进制(oct)、十进制(dec)、十六进制(hex)的互相转换。
界面设计这是界面的设计图:
输入框 | inputText |
输出框 | outputText |
输入二进制 | binI |
输出二进制 | binO |
输入八进制 | octI |
输出八进制 | octO |
输入十进制 | decI |
输出十进制 | decO |
输入十六进制 | hexI |
输出十六进制 | hexO |
转换按钮 | btnChange |
binI | QRadioButton::clicked() | baseChange::baseRadioChanged() | QString “I”, QString “bin” |
octI | QRadioButton::clicked() | baseChange::baseRadioChanged() | QString “I”, QString “oct” |
decI | QRadioButton::clicked() | baseChange::baseRadioChanged() | QString “I”, QString “dec” |
hexI | QRadioButton::clicked() | baseChange::baseRadioChanged() | QString “I”, QString “hex” |
binO | QRadioButton::clicked() | baseChange::baseRadioChanged() | QString “O”, QString “bin” |
octO | QRadioButton::clicked() | baseChange::baseRadioChanged() | QString “O”, QString “oct” |
decO | QRadioButton::clicked() | baseChange::baseRadioChanged() | QString “O”, QString “dec” |
hexO | QRadioButton::clicked() | baseChange::baseRadioChanged() | QString “O”, QString “hex” |
btnChange | QPushButton::clicked() | baseChange::changeBtnPushed() | None |
处理单选框内容被更改的事件,将对应全局变量赋值为对应的进制。
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: 数字的目标进制代码地址
版权声明:本文标题:Qt多功能计算器(三)——进制转换 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1686581744a84235.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论