一.与c++中的输入与输出的区别
在c++中我们一般通过控制台进行输入和输出,但是在qt中,我们的输入和输出要在界面中进行。
根据组件的不同,有的组件输入之后的类型是数值,但是有的组件输入之后的类型是QString类型
因此我们要学会QString与数值之间的相互转换,以便我们进行操作
二.QString转数值
这个其实我们在QString字符串中我就讲过,忘了的可以去看看,这里还是提一下吧。
其实就是用**toInt()**这个接口,int可以换成其他类型。
QString str="10086"; int num=str.toInt(); qDebug()<<num;
运行结果就是:10086
还可以加俩个参数第一个是判断是否转换成功
第二个是进制
int num; QString str1="a123"; bool ret; num=str1.toInt(&ret,10); if(ret) { qDebug()<<"转换成功"<<num; } else { qDebug()<<"转换失败"; }
运行的结果:转换失败。
其他类型的都是类似的。
三.数值转QString
1.number()
万物皆有两面,我们来看看数值又如何转换到QString的。
可以用QString自带的静态函数number()
int num=10086; QString str=QString::number(num); qDebug()<<str;
就成功的将整型转换成了QString类型!
也可以进行进制的转换
int num=255; QString str=QString::number(num,16); qDebug()<<str;
运行结果为:ff 这是16进制哦
还可以对浮点数进行转换
float num=3.14; QString str=QString::number(num,'f',2); qDebug()<<str;
f :就是用浮点数的形式进行打印。
e:就是用科学计数法的形式进行打印。
g:会根据具体数值自动的进行f或者e的形式进行打印。
2.asprintf()
还有一种方式也可以进行转换,有点类似于c语言的sprintf()
这个的好处就是可以将数值转换为QString字符串的时候,还可以自定义格式。
float num=3.1415; QString str=QString::asprintf("这个数为:%.2f",num); qDebug()<<str;
运行结果:这个数为:3.14
四.小项目
ok,我们现在知道了如何数值与字符串进行转换了,我们就可以来玩界面的东西了。下面我还是会以小的项目来边玩边学。
1.总价和进制
你们知道我刚刚为什么手写运行结果吗?
终于有网了,可以截图了,哈哈哈
目标图:
我们希望可以用户输入单价和数量后,就可以算出总价。
还有一个功能就是可以进行进制之间的转换。
话不多说,直接开始界面设计:
记得改每个组件的名字哦,方便你的操作!
这样的界面实在太垃,我们要添加布局
几个组件排列整齐,类似于表格的,我们可以用这个栅格布局
完美
然后我们用Spacer来添加空隙,达到自己喜欢的样式
最后我们对整个窗口进行一个垂直布局就可以达到:
OK,接下来就开始来实现我们的功能了,首先对计算进行转到槽
void Dialog::on_pushButtonCal_clicked() { int count=ui->lineEditCount->text().toInt(); float price=ui->lineEditPrice->text().toFloat(); float total=count*price; QString ret=QString::number(total,'f',2); ui->lineEditTotal->setText(ret); }
OK,我来讲讲这个代码,我们输入数据是在Line Edit组件里面,所以是QString的类型,但是我们需要做单价*数量的运算
所以我们刚刚学习的第一个点就可以用到了
先将字符串转成数值,然后进行乘法运算。
然后我们需要把结果输出到总价框中,因为里面需要的是字符串格式,所以,我们又将total转换成字符串的格式进行输出。
这就是字符串与数值之间的转换的具体用法。
可以先简单看下效果:
按道理总价是我们计算出来的,不允许我们进行输入,所以我们可以对总价的组件的enabled进行关闭。
然后运行结果:
总结就只能只读了
接下来我们开始对进制的功能进行实现。
void Dialog::on_pushButton10_clicked() { int dec=ui->lineEdit10->text().toInt(); QString hex=QString::number(dec,16); QString bin=QString::number(dec,2); ui->lineEdit2->setText(bin); ui->lineEdit16->setText(hex); } void Dialog::on_pushButton2_clicked() { bool ret; int bin=ui->lineEdit2->text().toInt(&ret,2); QString hex=QString::number(bin,16); QString dec=QString::number(bin,10); ui->lineEdit10->setText(dec); ui->lineEdit16->setText(hex); } void Dialog::on_pushButton16_clicked() { bool ret; int hex=ui->lineEdit16->text().toInt(&ret,16); QString bin=QString::number(hex,2); QString dec=QString::number(hex,10); ui->lineEdit10->setText(dec); ui->lineEdit2->setText(bin); }
原理基本相同:将进制框里输入的东西拿出来,转换成相应进制的数值,然后再转换成相应的字符串,设置到界面框中。
运行结果:
都可以相互转换,你们可以玩玩,不截图了。
现在咱们来讲讲那些不需要转换,输入之后就直接是数值的组件
【qt】数值的输入与输出2:https://developer.aliyun.com/article/1522983