QString : 类型转换,不留神就留坑?

2023-10-26

    QString作为Qt中内置的数据类型,功能强大且使用方便,绝对是在Qt开发过程中出场率最高的数据类型。本篇我们只重点探讨下QString转换成其他数据类型的注意事项。

    short  toShort(bool *ok=nullptr, int base=10) const;
    ushort toUShort(bool *ok=nullptr, int base=10) const;
    int toInt(bool *ok=nullptr, int base=10) const;
    uint toUInt(bool *ok=nullptr, int base=10) const;
    long toLong(bool *ok=nullptr, int base=10) const;
    ulong toULong(bool *ok=nullptr, int base=10) const;
    qlonglong toLongLong(bool *ok=nullptr, int base=10) const;
    qulonglong toULongLong(bool *ok=nullptr, int base=10) const;
    float toFloat(bool *ok=nullptr) const;
    double toDouble(bool *ok=nullptr) const;

从上述方法可以看到,QString可以转换到几乎我们常用的基本数据类型,相比较势单力薄的atoi 函数来讲, 这个家族刀剑还是比较齐全的。所以,决定把这几把刀耍一下。

#include <QCoreApplication>
#include <QString>
#include <QDebug>
#include <iostream>
#include <stdio.h>

using namespace std;

#define string_expression(expression) #expression
#define string_to(string,type) QString(string).to##type()
#define compare_result(expression,dst_result) \
    do{\
    if( qAbs( (dst_result) - (expression)) < 0.0001f ) \
    qDebug() << "[ pass ] "  << expression << " == " << dst_result << "\t\t"<< string_expression(expression);\
    else{ \
    qDebug() << "[failed] "  << expression << " != " << dst_result<< "\t\t" << string_expression(expression); \
    }\
    }while(0);
#define SHOW_HLINE(N) \
    do{\
    QString line = QString((N),QChar('_'));\
    qDebug() << line;\
    }while(0);

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QString test_string  = "72";
    compare_result(string_to(test_string,Short),72);
    compare_result(string_to(test_string,UShort),72);
    compare_result(string_to(test_string,Int),72);
    compare_result(string_to(test_string,UInt),72);
    compare_result(string_to(test_string,Float),72);
    compare_result(string_to(test_string,Double),72);

    SHOW_HLINE(100);

    test_string  = "72.890";
    compare_result(string_to(test_string,Short),72);
    compare_result(string_to(test_string,UShort),72);
    compare_result(string_to(test_string,Int),72);
    compare_result(string_to(test_string,UInt),72);
    compare_result(string_to(test_string,Float),72.89);
    compare_result(string_to(test_string,Double),72.89);

    return a.exec();
}

看看结果:

[ pass ]  72  ==  72             QString(test_string).toShort()
[ pass ]  72  ==  72             QString(test_string).toUShort()
[ pass ]  72  ==  72             QString(test_string).toInt()
[ pass ]  72  ==  72             QString(test_string).toUInt()
[ pass ]  72  ==  72             QString(test_string).toFloat()
[ pass ]  72  ==  72             QString(test_string).toDouble()
"____________________________________________________________________________________________________"
[failed]  0  !=  72              QString(test_string).toShort()
[failed]  0  !=  72              QString(test_string).toUShort()
[failed]  0  !=  72              QString(test_string).toInt()
[failed]  0  !=  72              QString(test_string).toUInt()
[ pass ]  72.89  ==  72.89               QString(test_string).toFloat()
[ pass ]  72.89  ==  72.89               QString(test_string).toDouble()

what ? 当测试 字符串”72.890“转为整形变量的时候,结果居然是0 !不得不说太坑了

所以,郑重提示各位,QString 转整形,一定要慎重慎重再慎重(加大加粗描红)

具体为什么,下篇根据QString的源码进行分析

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

QString : 类型转换,不留神就留坑? 的相关文章

  • Qt中QString与String的互相转换

    前言 Qt中的一些类型是Qt自己封装的 xff0c 例如我们平常常见的String在Qt中就是QString xff0c 但是有时我们调用第三方库时 xff0c 参数要求是String xff0c 这时我们就需要把QString转换成Str
  • Qt信号和信号槽(二)

    目录 信号槽使用拓展 示例1 一个信号可以对应多个槽函数 在上篇文章的代码中进行修改 示例2 用信号连接信号 信号槽的连接方式 示例 Lambda表达式 语法格式 定义和调用 信号槽使用拓展 一个信号可以连接多个槽函数 发送一个信号有多个处
  • Qt——打开QT项目时只有.pro文件,头文件、源文件都不见了(涉及高低版本Qt的Kits工具,Could not find qmake spec ‘default‘.Error while par

    注意 若转载 请贴上链接 https blog csdn net qq 41042595 article details 126244047 如若发现抄袭或未标明来源现象 都可举报反馈 文章目录 前提 问题的由来 问题分析 回想 解决方案
  • QJsonObject 类

    1 QJsonObject简介 QJsonObject类封装了一个JSON对象 JSON对象是键值对的列表 其中键是唯一的字符串 值由QJsonValue表示 QJsonObject可以转换为QVariantMap 也可以从QVariant
  • Qt中的信号和信号槽(一)

    目录 1 信号和槽概述 信号和槽的关系 2 标准信号槽使用 标准信号 槽 示例 3 自定义信号槽使用 自定义信号 自定义槽 示例 1 信号和槽概述 信号和槽是一种事件驱动的通信机制 广泛应用于Qt框架的事件处理 GUI编程 网络通信等方面
  • 给Sqlite数据库设置密码

    免费版Sqlie是不提供设置密码功能的 经过查阅资料最终找到了解决方案 方案一 从sqlite源码入手 据说sqlite源码已经提供了加密的接口 只是免费版没有实现 可以参考这位仁兄的博客以了解详情 http www cnblogs com
  • 关于Qt和C++中的反射机制实现与运用(2)

    看到一个很好的实例 这里就转载过来了 原文地址 C 反射机制 一 前言 Java有着一个非常突出的动态相关机制 Reflection 用在Java身上指的是我们可以于运行时加载 探知 使用编译期间完全未知的classes 换句话说 Java
  • Qt Utils : To-Do

    Qt Creator自带的todo插件工具 真心舒爽 特别是对于我这种记不住三天前自己写的shit mountain的 渣渣CXY来讲 边撸代码边注释 快速查阅Task 非常重要 1 上效果图 2 工具使用 1 勾选使用插件 重启Qt Cr
  • Qt概述和项目文件介绍

    注意 学习本专栏的内容需要了解C 相关知识 会涉及到C 基础语法和相关特性 可以参考我的另一个专栏 c 从零开始 小梁今天敲代码了吗的博客 CSDN博客 目录 一 什么是Qt 二 Qt的案例 三 项目文件介绍 一 什么是Qt 是一个跨平台的
  • Qt 常用的字符转换,QString如何转换成const char类型, 转 PWCHAR wchar_t*

    常用的字符转换 日常记录 QString如何转换成const char类型 const char cmd data qstring toStdString c str qstring为待转换的qstring类型字符串 QString for
  • Qt : d指针和q指针?

    目录 一 什么是d指针和q指针 1 d指针 2 q 指针 二 d指针和q指针的作用 三 d指针和q指针的使用 demo 一 什么是d指针和q指针 在Qt的源码中 我们看到大量的Q D 和Q P 宏的调用 查看代码时在一定程度上增加了复杂度
  • Q_UNUSED ( name ) 的用法

    一 用法 Q UNUSED 没有实质性的作用 用来避免编译器警告 for example int transition getSTL int type Q UNUSED type return 123 二 相关问题处理 如果编译中出现以下警
  • Qt 在主界面程序中,调用子界面(另一个界面)的控件

    问题 在主界面程序mainwindow cpp中 想调用子界面 另一个界面 上的控件 已经在 pro工程中添加好了一个设计师界面类作为子界面 这里我在工程中添加的是show netlist dialog cpp h ui 解决步骤 1 在子
  • Qt5打包——利用自带的windeployqt.exe和工具Enigma Virtual Box

    目录 运行 添加依赖 发布成单一exe形式 运行 选择Release版本 运行一次 Release 运行后会发现多了Release版本 里面有exe 但是双击时会发现缺少一些动态链接库 直接点击后缺少动态链接库 添加依赖 在你的Qt的安装包
  • 分享一个QTabWidget的好看样式

    void setTabWidgetStyleSheet QTabWidget obj obj gt setStyleSheet QTabWidget background color transparent QTabWidget pane
  • 如何将字符串转换为QString?

    最基本的方法是什么 如果使用 STL 兼容性进行编译 QString has a 静态方法转换一个std string to a QString std string str abc QString qstr QString fromStd
  • 在 Qt 中将 QString 转换为 Ascii 值,反之亦然

    我有一个QString StrData abcd 我想要得到Ascii该字符串的十六进制值 反之亦然 例如来自 abcd to 61 62 63 64 和来自 61 62 63 64 to abcd 我设法获得十六进制的 Ascii 值 但
  • 在 QT 的 textedit 中为特定行(由光标指示)着色,但每次按下按钮时光标的位置都会随着功能而变化

    我是这样编辑的 但是 即使单词已添加到正确的位置并着色 所有文本也不会打印在 textEdit 中 ui gt textEdit gt setText display text QTextcursor cursor ui gt textEd
  • 将 std::string 转换为 QString

    我有一个std string content我知道包含 UTF 8 数据 我想将其转换为QString http doc qt io qt 4 8 qstring html 我该如何做到这一点 避免 Qt 中的 from ASCII 转换
  • for循环中的Qt字符串生成器

    下列的this http labs qt nokia com 2011 06 13 string concatenation with qstringbuilder and this http doc snapshot qt project

随机推荐

  • Matlab数组操作教程

    Matlab是一种强大的数值计算和科学编程语言 它提供了许多强大的数组操作功能 在本教程中 我们将介绍一些常用的Matlab数组操作 并提供一些示例代码来帮助您更好地理解 1 创建数组在Matlab中 可以使用以下方法创建数组 使用方括号
  • ESP32-C3 学习测试 蓝牙 篇(三、认识蓝牙 GATT 协议)

    磨刀不误砍柴工 本文了解一些基本的蓝牙协议基础知识 更新概念导图部分关于 Server 和 Service 文字说明 2022 6 13 修改出错的地方 细节优化 2023 5 29 目录 前言 一 概念导图 GATT 的结构 Servic
  • 2023华为OD机试真题【新词挖掘】

    题目描述 小华负责公司知识图谱产品 现在要通过新词挖掘完善知识图谱新词挖掘 给出一个待挖掘问题内容字符串Content和一人词的字符串word 找到content中所有word的新词 新词 使用词word的字符排列形成的字符串 请帮小华实现
  • Retrofit指南

    http www android100 org html 201504 25 139807 html 我为什么选择Retrofit 在使用square的Retrofit之前 我尝试过Volley和AsyncTask 但在使用过Retrofi
  • Lua获取随机数

    Lua获取随机数函数 math random m n 该函数有三种用法 1 random 返回0到1之间的一个伪随机数 2 random n 返回1到n之间的伪随机整数 3 random m n 返回m到n之间的伪随机整数 比如计算100次
  • ubuntu samba Windows共享 你可能没有权限访问网络资源

    问题及现象 在Windows下访问samba 提示 您可能没有权限使用网络资源 请与这台服务器的管理员联系以查明您是否有访问权限 网络没问题 可以相互ping通 Windows下面可以看到samba共享的文件夹 打开文件夹提示以上提示 解决
  • 2023全球区块链产业图谱报告

    区块链作为数字经济发展的重要支撑 在推动产业升级 经济转型方面发挥的协同作用愈加明显 近年来 区块链技术和产业在全球范围内快速发展 展现出广阔的应用前景 全球区块链产业图谱报告 从区块链产业发展态势 相关政策 标准与专利 细分产业领域 投融
  • centos系统yum源配置

    1 centos 8本地源配置 1 连接镜像文件 将centos 8系统镜像通过KVM连接到系统下 2 挂载镜像文件 mount dev sr0 mnt dev sr0为镜像文件在系统下的位置 3 编辑配置文件 cd etc yum rep
  • node播放视频流

    import http from http import url from url import util from util import qs from querystring import fs from fs 默认GET方法响应 c
  • SpringBoot微服务架构学习

    一 SpringBoot概述 1 什么是SpringBoot SpringBoot是一个开发基于Spring框架的应用的快速开发框架 它也是SpringCloud构建微服务分布式系统的基础设施 2 SpringBoot有哪些主要特性 Spr
  • Python与自动化测试:提高软件质量和稳定性

    在软件开发过程中 自动化测试是提高软件质量和稳定性的重要手段之一 Python作为一种简洁而强大的编程语言 为自动化测试提供了丰富的工具和库 本文将介绍几个常见的自动化测试案例 并提供详细的Python代码示例 帮助您更好地理解和应用自动化
  • Caffe各层的参数设置(在prototxt文件中设置)

    Caffe各层的参数设置 在prototxt文件中设置 这些参数定义在include caffe proto caffe proto文件中 如果要查看某种层的参数 请展开本文的目录 点击相应的条目来跳转 syntax proto2 pack
  • CSS字体、文本属性

    CSS字体 文本属性 字体系列 font family设置字体 字体大小 字体粗细 文字样式 字体复合属性 字体属性总结 文本系列 文本属性 文本颜色 对齐文本 装饰文本 文本缩进 行间距 字体系列 font family设置字体 cs使用
  • C++ 调试 The breakpoint will not currently be hit. No symbols have been loaded for this document.

    C debug调试 The breakpoint will not currently be hit No symbols have been loaded for this document 1 编译 以Test为例 右键Properti
  • Nginx解决“no resolver defined to resolve xxx.xxx”

    1 2 3 4 5 6 7 8 9 10
  • AI制作ICON展示

    作者 陈石军 撰写时间 2019年4月7日 我先做了个背景色 这个背景色我用了三种颜色 它们分别为白色 fdfdfd 蓝色 94cfe2 绿色 72c190 背景色是由一个矩形和俩个形状图形组成的 接下来就是排版了 排版有好几种 分别是靠左
  • Scratch第一讲:scratch编程软件介绍

    喜欢编程的各位小朋友们你们好呀 欢迎来到scratch小课堂 从今天起 我们要从0开始学习scratch编程 那么有的同学要问了 什么是scratch Scratch是由麻省理工学院 MIT 设计开发的一款面向少年的简易编程工具 它的功能非
  • Linux线程性能分析和CPU亲和力

    一 线程迁移和负载均衡 Linux系统在多核CPU和SMP系统上有完善的负载均衡支持 在SMP系统中 每个CPU的核都有一个迁移线程守护程序migration 一般是系统最高优先级139 实时99 以实现执行资源平衡作业 当我们调用sche
  • 5g信号云端服务器,5G基站已有11W 国内云游戏迎来春天

    目前有报道称全国已经开通了11 3W个5G网络基站 已有87万户5G签约用户 这意味着在全国范围 有关需要网络的IT产品和生活产品都将迎来春天 其中包括网络连接使用的云游戏 进入到2019年 国内5G商用全面启动 华为 小米 OPPO等手机
  • QString : 类型转换,不留神就留坑?

    QString作为Qt中内置的数据类型 功能强大且使用方便 绝对是在Qt开发过程中出场率最高的数据类型 本篇我们只重点探讨下QString转换成其他数据类型的注意事项 short toShort bool ok nullptr int ba