Qt: QString::number()

news/2024/9/29 20:00:54 标签: qt, 开发语言

前言

正文

QString::number() 是 Qt 框架中一个非常实用的静态方法,用于将各种数值类型转换为 QString 对象。这个函数支持整数、浮点数等多种数据类型的转换,并允许指定数值的进制或格式。掌握 QString::number() 的使用方法,对于在 Qt 应用中进行数据展示、日志记录、用户界面更新等操作至关重要。

1. 函数原型

QString::number() 提供了多个重载版本,以支持不同的数据类型和转换需求。以下是主要的重载形式:

1.1 转换整数类型

static QString number(int n, int base = 10);
static QString number(unsigned int n, int base = 10);
static QString number(long n, int base = 10);
static QString number(unsigned long n, int base = 10);
static QString number(qint64 n, int base = 10);
static QString number(quint64 n, int base = 10);

1.2 转换浮点数类型

static QString number(double n, char format = 'g', int precision = 6);

2. 参数详解

2.1 整数类型转换

  • n: 要转换的整数值,可以是有符号或无符号的,支持多种整数类型(如 int, long, qint64 等)。
  • base: 指定转换的进制,默认为 10(十进制)。支持的进制范围为 2 到 36,其中:
    • 2: 二进制
    • 8: 八进制
    • 10: 十进制
    • 16: 十六进制
    • 其他进制如 3, 4, …, 36 也被支持。

注意: 当转换为非十进制时,base 参数必须在 2 到 36 之间,否则将返回一个空的 QString

2.2 浮点数类型转换

  • n: 要转换的浮点数值,通常是 double 类型。
  • format: 指定浮点数的表示格式,常用的有:
    • 'e''E': 科学计数法(如 1.23e+04)
    • 'f': 定点数表示法(如 12345.678)
    • 'g': 自动选择 'e''f' 中更合适的格式
  • precision: 指定小数点后的位数,默认为 6。对于 'f' 格式,这表示小数位数;对于 'e' 格式,这表示有效数字的位数。

3. 使用示例

3.1 整数转换

3.1.1 十进制转换
int main() {
    int num = 12345;
    QString str = QString::number(num);
    qDebug() << "十进制:" << str; // 输出: "12345"
    return 0;
}
3.1.2 十六进制转换
int main() {
    int num = 255;
    QString hexStr = QString::number(num, 16).toUpper();
    qDebug() << "十六进制:" << hexStr; // 输出: "FF"
    return 0;
}
3.1.3 二进制转换
int main() {
    int num = 5;
    QString binaryStr = QString::number(num, 2);
    qDebug() << "二进制:" << binaryStr; // 输出: "101"
    return 0;
}
3.1.4 八进制转换
int main() {
    int num = 64;
    QString octalStr = QString::number(num, 8);
    qDebug() << "八进制:" << octalStr; // 输出: "100"
    return 0;
}

3.2 浮点数转换

3.2.1 默认格式和精度
int main() {
    double pi = 3.141592653589793;
    QString piStr = QString::number(pi);
    qDebug() << "默认格式和精度:" << piStr; // 输出: "3.14159"
    return 0;
}
3.2.2 定点数格式 ('f') 和指定精度
int main() {
    double value = 12345.6789;
    QString fixedStr = QString::number(value, 'f', 2);
    qDebug() << "定点数格式,保留两位小数:" << fixedStr; // 输出: "12345.68"
    return 0;
}
3.2.3 科学计数法格式 ('e')
int main() {
    double value = 0.0001234;
    QString scientificStr = QString::number(value, 'e', 2);
    qDebug() << "科学计数法格式:" << scientificStr; // 输出: "1.23e-04"
    return 0;
}
3.2.4 自动格式选择 ('g')
int main() {
    double value1 = 12345.6789;
    double value2 = 0.0001234;
    QString autoStr1 = QString::number(value1, 'g', 6);
    QString autoStr2 = QString::number(value2, 'g', 6);
    qDebug() << "自动格式选择(大数):" << autoStr1; // 输出: "12345.7"
    qDebug() << "自动格式选择(小数):" << autoStr2; // 输出: "0.0001234"
    return 0;
}

3.3 综合示例

#include <QString>
#include <QDebug>

int main() {
    // 整数转换示例
    int dec = 255;
    QString decStr = QString::number(dec);
    QString hexStr = QString::number(dec, 16).toUpper();
    QString binStr = QString::number(dec, 2);
    
    qDebug() << "十进制:" << decStr; // 输出: "255"
    qDebug() << "十六进制:" << hexStr; // 输出: "FF"
    qDebug() << "二进制:" << binStr; // 输出: "11111111"
    
    // 浮点数转换示例
    double pi = 3.141592653589793;
    QString piDefault = QString::number(pi);
    QString piFixed = QString::number(pi, 'f', 3);
    QString piScientific = QString::number(pi, 'e', 2);
    
    qDebug() << "默认格式:" << piDefault; // 输出: "3.14159"
    qDebug() << "定点格式,3位小数:" << piFixed; // 输出: "3.142"
    qDebug() << "科学计数法,2位有效数字:" << piScientific; // 输出: "3.14e+00"
    
    return 0;
}

输出:

十进制: "255"
十六进制: "FF"
二进制: "11111111"
默认格式: "3.14159"
定点格式,3位小数: "3.142"
科学计数法,2位有效数字: "3.14e+00"

4. 进制转换支持范围

QString::number() 支持从 2 到 36 的进制转换。这意味着你可以将数字转换为二进制、八进制、十进制、十六进制,甚至更高的进制(如 36 进制)。在 36 进制中,使用 0-9 和 A-Z 代表数值。

int main() {
    int num = 123456;
    for(int base = 2; base <= 36; ++base) {
        QString converted = QString::number(num, base);
        qDebug() << QString("Base %1: %2").arg(base).arg(converted);
    }
    return 0;
}

输出部分(简化):

Base 2: "11110001001000000"
Base 3: "12122120000"
...
Base 10: "123456"
...
Base 16: "1E240"
...
Base 36: "2N9C"

5. 注意事项

5.1 进制范围

  • 仅适用于整数类型的转换。
  • base 参数必须在 2 到 36 之间,超出范围将导致返回一个空的 QString

5.2 浮点数精度

  • 在转换浮点数时,precision 参数控制小数点后的位数或有效数字的数量。
  • 过高的精度可能导致字符串过长,需根据实际需求调整。

5.3 字母大小写

  • 对于十六进制及更高进制的转换,默认输出为小写字母。可以通过调用 QString::toUpper()QString::toLower() 方法调整大小写。
int main() {
    int num = 255;
    QString hexStr = QString::number(num, 16); // "ff"
    QString hexUpper = hexStr.toUpper(); // "FF"
    QString hexLower = hexStr.toLower(); // "ff"
    
    qDebug() << "小写十六进制:" << hexStr;
    qDebug() << "大写十六进制:" << hexUpper;
    qDebug() << "小写十六进制:" << hexLower;
    
    return 0;
}

输出:

小写十六进制: "ff"
大写十六进制: "FF"
小写十六进制: "ff"

5.4 负数处理

  • 对于有符号整数,负数会在字符串前加上负号 -
int main() {
    int num = -123;
    QString str = QString::number(num);
    qDebug() << "负数转换:" << str; // 输出: "-123"
    return 0;
}

5.5 边界情况

  • 当数值超过目标类型的表示范围时,可能导致不正确的转换结果或溢出。
int main() {
    long long num = 9223372036854775807; // 最大的 64 位有符号整数
    QString str = QString::number(num);
    qDebug() << "最大64位整数:" << str; // 输出: "9223372036854775807"
    
    num = -9223372036854775807 - 1; // 最小的 64 位有符号整数
    str = QString::number(num);
    qDebug() << "最小64位整数:" << str; // 输出: "-9223372036854775808"
    
    return 0;
}

6. 与其他 QString 转换方法的对比

QString::number() 是将数值类型转换为字符串的主要方法,但 Qt 还提供了其他方法来进行类型转换:

  • QString::fromStdString(const std::string &): 将 std::string 转换为 QString
  • QString::toInt(), QString::toDouble() 等: 将 QString 转换为数值类型。
  • QString::arg(): 用于在字符串中插入数值,支持格式化。

示例: 使用 arg() 进行格式化

int main() {
    int num = 42;
    double pi = 3.14159;
    QString formattedStr = QString("整数: %1, 浮点数: %2").arg(num).arg(pi, 0, 'f', 2);
    qDebug() << formattedStr; // 输出: "整数: 42, 浮点数: 3.14"
    return 0;
}

7. 总结

QString::number() 是 Qt 中用于将数值类型转换为字符串的强大工具,支持多种数值类型和进制转换。通过掌握其不同的重载形式和参数设置,开发者可以灵活地在应用中展示和处理数值数据。无论是简单的十进制转换,还是复杂的多进制或格式化需求,QString::number() 都能提供高效且可靠的解决方案。

关键点回顾:

  • 支持多种数值类型(整数、浮点数)。
  • 允许指定进制(2-36)用于整数类型。
  • 提供浮点数格式化选项('e', 'f', 'g')及精度控制。
  • 可通过 toUpper()toLower() 调整字母大小写。
  • 需要注意参数范围和数值类型的边界情况。

通过合理使用 QString::number(),可以显著提升 Qt 应用中数据处理和展示的灵活性与效率。

小结


http://www.niftyadmin.cn/n/5683647.html

相关文章

联想电脑怎么开启vt_联想电脑开启vt虚拟化教程(附intel和amd主板开启方法)

最近使用联想电脑的小伙伴们问我&#xff0c;联想电脑怎么开启vt虚拟。大多数可以在Bios中开启vt虚拟化技术&#xff0c;当CPU支持VT-x虚拟化技术&#xff0c;有些电脑会自动开启VT-x虚拟化技术功能。而大部分的电脑则需要在Bios Setup界面中&#xff0c;手动进行设置&#xff…

【PGCCC】PostgreSQL中的超级监控助手:pg_stat_monitor,您数据库的最佳搭档!

在数据库管理的浩瀚海洋中&#xff0c;如何有效监控和优化性能始终是每位DBA心中挥之不去的难题。今天&#xff0c;我们要深入探讨一个在PostgreSQL社区中炙手可热的工具——pg_stat_monitor。它不仅能够帮助我们实时监控数据库性能&#xff0c;还能为我们的优化决策提供强有力…

ubuntu数据硬盘故障导致系统启动失败

背景&#xff1a; 系统盘损坏或者/etc/fatab误修改导致开机启动挂载失败系统无法启动 解决方法 重启

如何使用tcpdump android手机抓包

使用 tcpdump 在 Android 手机上抓包的步骤如下&#xff1a; 准备工作 获取 Root 权限&#xff1a; tcpdump 需要 root 权限来访问网络接口。如果你的设备没有 root 权限&#xff0c;你可以考虑使用 ADB 调试或寻找其他抓包工具&#xff0c;如 Packet Capture 或 tPacketCaptu…

STM32重启源深度解析

文章目录 STM32重启源深度解析一、STM32重启概述二、硬件层面的重启源1、电源异常电压不稳定&#xff1a;电源供电不足&#xff1a; 2、复位电路故障复位引脚异常&#xff1a;复位电路设计不合理&#xff1a; 3、外部干扰电磁干扰&#xff1a;静电干扰&#xff1a; 三、软件层面…

JS加密=JS混淆?(JS加密、JS混淆,是一回事吗?)

JS加密、JS混淆&#xff0c;是一回事吗&#xff1f; 是的&#xff01;在国内&#xff0c;JS加密&#xff0c;其实就是指JS混淆。 1、当人们提起JS加密时&#xff0c;通常是指对JS代码进行混淆加密处理&#xff0c;而不是指JS加密算法&#xff08;如xor加密算法、md5加密算法、…

Vue 常用的指令用法

文章目录 Vue 常用的指令用法一、引言二、指令详解1、v-model2、v-bind3、v-for4、v-if / v-else-if / v-else5、v-show6、v-on7、v-text 和 v-html 三、指令使用技巧四、总结 Vue 常用的指令用法 一、引言 Vue.js 是一个构建用户界面的渐进式框架&#xff0c;它通过一系列指…

uniapp中h5环境添加console.log输出

<script src"https://unpkg.com/vconsolelatest/dist/vconsole.min.js"></script><script>// VConsole 默认会挂载到 window.VConsole 上window.vConsole new window.VConsole({defaultPlugins: [system, network, element, storage],// 可以在此…