(五)QString和数字的转换

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);
### 关于 QString QStringList 的相互转换 #### 将 QString 转换QStringList 可以通过 `QString` 提供的分割函数实现将单个字符串拆分为多个子字符串并存储到 `QStringList` 中。以下是具体方法: ```cpp #include <QString> #include <QStringList> QString str = "apple,banana,cherry"; QStringList list = str.split(","); // 使用逗号作为分隔符 // 输出结果:["apple", "banana", "cherry"] ``` 此操作利用了 `split()` 方法[^1],可以根据指定的分隔符将字符串分解成列表。 --- #### 将 QStringList 转换QString 如果需要将一个 `QStringList` 合并为单一的 `QString`,可以使用 `join()` 函数。该函数允许通过指定连接符来组合各个元素。 ```cpp QStringList list; list << "apple" << "banana" << "cherry"; QString result = list.join(", "); // 使用 ", " 连接各元素 // 输出结果:"apple, banana, cherry" ``` 这里展示了如何通过调用 `join()` 来完成反向的操作。 --- #### 隐式转换注意事项 需要注意的是,虽然 `QStringList` 可以隐式转换为 `QList<QString>`,但反过来则不支持自动转换。因此,在处理两者之间的关系时需特别注意上下文环境的要求。 另外,当涉及到更复杂的编码场景比如从 `QString` 到字节数组 (`QByteArray`)变,则应采用 `.toUtf8()` 等方式来进行有效化[^2]。 对于数值类型的转换也有相应机制,例如把表示数字的字符串形式化为实际整数类型可通过如下手段达成[^4]: ```cpp QString numStr = "12345"; int number = numStr.toInt(); qDebug() << "Converted integer:" << number; ``` 综上所述,无论是简单的拼接还是解析过程亦或是其他数据形态间的互换都有成熟的解决方案可供选用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值