1.QString转数字
QString类提供了非常方便的数字类型转换,包括常用的int float double等,也包括不常用的long long等,具体转换如下:
QString string = "1";
int int_string = string.toInt();//int类型
long long_string = string.toLong();//long
float float_string = string.toFloat();//float
short short_string = string.toShort();//short
double double_string = string.toDouble();//double
qlonglong longlong_string = string.toLongLong();//long long int, 即__int64 64位有符号int
unsigned int unint_string = string.toUInt();//无符号int
只需要一行代码就可以转换完成,是非常方便的。但是注意:QT是有坑的,一不小心,你就掉进去出不来了,例如,QString如果是“1.0.1”,那么结果如何呢?
看到了吗?除了double、float,其他的转换全部变成0了,toInt、toLong、toShort、toLongLong、toUInt要求的都是整型,也就是变量需要是0-9之间,有其他字符都会导致转换失败。所以如果你对需要转换的数据类型不了解,请务必使用下面的方式:
QString string = "1.01";
bool ok;
int int_string = string.toInt(&ok);//int类型
if(!ok)
{
printf("数据转换失败,原始类型非整型");
}
2.数字转QString
数字转QString就比较简单了,QString对number函数进行了重载,会根据你传入的数据类型自动选择函数:
double num = 1.24;
QString string_num = QString::number(num);
QT提供的转换如下:
这样操作,可以得到一个按照10进制转换的QString。如果你想转换8进制或者10进制,那么你要保证传入的参数是整型,否则QT会报错:
int num = 1;
QString string_num = QString::number(num,8);
其实QT还提供了一个函数setNum(),这个函数在功能上和number并没有区别,都可以转换数字为QString,区别是setNum返回的是一个QString类型的引用,而不是一个QString:
int num = 1;
QString string_num;
string_num.setNum(num);