QT开发之QString转换之路

2023-11-10

编程中少不了字符串的使用,QT提供了QString变量类型,字符串链表可直接使用QStringList进行变量定义和声明,那如果使用了其他表示字符串的变量应该怎么相互转化呢?这里就列举几个常用的几个类型之间的转化;错误之处,还望指出批评。

1.QString与string

QString qsPara;
string sPara;

//QString->string
sPara = qsPara.toStdString();     //方法一
//qsPara = QString(QString::fromLocal8Bit(sPara.c_str()));
sPara = (const char *)qsPara.toLocal8Bit();//方法二

//string->QString
qsPara = QString::fromStdString(sPara);//方法一
//sPara = string((const char *)qsPara.toLocal8Bit());
qsPara = QString::fromLocal8Bit(sPara.c_str());//方法二

2.QString与QByteArray

​QString是专门用来处理字符串的,除了能处理ASCII编码字符,还包括各国语言的编码,默认情况下QString会把所有数据当做utf-8编码来处理。QByteArray只是单纯用来处理数据的,除了能处理ASCII编码字符,其它复杂的编码不能处理,直接以字节流的方式来对待;因此如果字符串中含有中文或其他非拉丁字符,则需要通过转换为char或者char * 进行使用。

QString qsPara;
QByteArray qbaPara;

//QString->QByteArray
qbaPara = qsPara.toUtf8();     //将字符串的u-tf8形式返回给QByteArray变量
qbaPara = qsPara.toLatin1();   //如果字符串中含有 非拉丁字符(有中文字符等)时非拉丁字符部分会被“??”代替。
//QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));//此语句可用于设置“toLocal8Bit()”的编码格式。
qbaPara = qsPara.toLocal8Bit();//将字符串按照本地编码进行输出,如果无法确定编码格式,与“toLatin1()”执行一致,转换为char/char * 时为中文字符。

//QByteArray->QString
qsPara = qbaPara;       //直接赋值
qsPara.append(qbaPara); //后置添加
qsPara.prepend(qbaPara);//前置添加
qsPara = QString(qbaPara);//QString的构造函数

3.QString与char

char数据类型的变量只能容纳一个字符,而且在大多数系统上,只使用一个字节的内存,因此此处仅说明char转换为QString的情况;如果要在常数或变量中存储多个字符,则需要使用更复杂的字符数据类型 string、QString、QStringList,字符串常数和变量可以包含一系列的字符。另外可使用char *指针变量存储多个字符。

QString qsPara;
char chPara;

//char->QString
//chPara = "a"; char类型变量的错误赋值
chPara = 'A';//注意使用单引号
qsPara = QString(chPara);//QString的构造函数

4.QString与char *

将 QString 转 char *,需要用到上述提到的QByteArray 类;因为 char * 最后都有以’\0’作为结束符,而采用 QString::toLatin1() 时会在字符串后面加上’\0’,因此按照下述方法转换。

QString qsPara;
QByteArray qbaPara;
char *charPara;

//QString->char *
qsPara = "ajsdaj3665";
/*在调用QByteArray.data()之前,必须要先显示储存这个bytearray。像这样const char *ch = str.toLatin1().data();
会使程序崩溃,因为QByteArray没有被储存,调用data()前是不存在的,必须先显式调用一次toLatin1(),再调用data()。*/
qbaPara = qsPara.toLatin1();
charPara = qbaPara.data();

//char *-> QString
//方法一:QString的构造函数QString(const QLatin1String &str)及QLatin1String的构造函数QLatin1String(const char *str);
qsPara = QString(QLatin1String(charPara));
//方法二:先转换为QByteArray,再转换为QString
qbaPara = QByteArray(charPara);//QByteArray的构造函数转换为QByteArray,然后以下四种任选其一
qsPara = qbaPara;       //直接赋值
qsPara.append(qbaPara); //后置添加
qsPara.prepend(qbaPara);//前置添加
qsPara = QString(qbaPara);//QString的构造函数

5.QString与QDateTime

QDateTime定义的变量可用于显示当前时间。

QString qsPara;
QDateTime qdtPara;

//QString-> QDateTime 
qdtPara = QDateTime::currentDateTime();//获取本地系统的当前时间
qsPara = qdtPara.toString("yyyy-MM-dd hh:mm:ss");//时间显示格式

//QDateTime -> QString
qsPara = "2010-07-02 17:35:00"; 
qdtPara = QDateTime::fromString(qsPara, "yyyy-MM-dd hh:mm:ss");

本文使用头文件

#include <QDebug>
#include <QTime>
#include <string>
#include <QTextCodec>
using namespace std;

#pragma execution_character_set("utf-8")//防止中文乱码;需要根据情况选择是否使用

本文内容参考内容如下:
https://www.cnblogs.com/findumars/p/5107700.html
https://blog.csdn.net/qq_33485434/article/details/78790285
https://blog.csdn.net/qq_35040828/article/details/53580596
https://blog.csdn.net/qq_35451572/article/details/79739300
https://blog.csdn.net/qq_16093323/article/details/79556807
https://www.jb51.net/article/182812.htm
http://c.biancheng.net/view/1323.html

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

QT开发之QString转换之路 的相关文章

随机推荐

  • EI、Scopus双检索

    会议简介 Brief Introduction 2023年第四届自动化 机械与设计工程国际会议 SAMDE 2023 会议时间 2023年12月8 10日 召开地点 中国 南京 大会官网 www samde org 机械设计制造及其自动化学
  • python第三方库集锦

    环境管理管理 Python 版本和环境的工具 p 非常简单的交互式 python 版本管理工具 pyenv 简单的 Python 版本管理工具 Vex 可以在虚拟环境中执行命令 virtualenv 创建独立 Python 环境的工具 vi
  • Qt : d指针和q指针?

    目录 一 什么是d指针和q指针 1 d指针 2 q 指针 二 d指针和q指针的作用 三 d指针和q指针的使用 demo 一 什么是d指针和q指针 在Qt的源码中 我们看到大量的Q D 和Q P 宏的调用 查看代码时在一定程度上增加了复杂度
  • 阿里云部署 ChatGLM2-6B 与 langchain+ChatGLM

    1 ChatGLM2 6B 部署 更新系统 apt get update 安装git apt get install git lfs git init git lfs install 克隆 ChatGLM2 6B 源码 git clone
  • vite中无法使用require和@无法使用的问题

    1 安装插件 yarn 安装 yarn add D vite plugin require transform npm 安装 npm i vite plugin require transform S 2 在vite中配置一下即可 impo
  • 解决python发送https请求,出现证书错误,及报错提示

    详细报错信息如下 Error Traceback most recent call last File E WebWafUi venv lib site packages urllib3 connectionpool py line 603
  • 2.4G天线匹配设计,不谈原理和规范,直接怼PCB设计

    关注嘉友创科技公众号 各位大虾 说个天线设计的过程 此过程实测性能是官方的参数的80 不需要任何仪器测试的情况下 适合穷逼 买不起仪器 1 确定厂家 确定板厚 2 依据板厚 找生成PCB厂家确定板层分布 厂家不同 很多参数不同 3 确定阻抗
  • 自己实现MediaExtractor(一)

    1 背景 Android很坑 编解码大坑 最近遇到MediaExtractor的坑了 坑1 读PCM音频巨慢 因为Android的实现是一个一个sample读的 坑2 某些手机只能读取到一路视频或音频track 如oppo Find X 个
  • 【MATLAB】命令行窗口乱码问题

    昨天开始重新学习matlab 按着网上教程一直配置 将编码格式改成 UTF 8 查看编码方式可以用slCharacterEncoding 函数 然后在编辑器上面编写内容果然没有发现乱码 但是一旦将编辑器上面的内容在命令行窗口输出就出现乱码的
  • linux常见的基本命令面试题总结

    问题一 绝对路径用什么符号表示 当前目录 上层目录用什么表示 主目录用什么表示 切换目录用什么命令 答案 绝对路径 如 etc init d 当前目录和上层目录 主目录 切换目录 cd问题二 怎么查看当前进程 怎么执行退出 怎么查看当前路径
  • nacos 监听配置文件变动(自动刷新),监听服务变动(权重、元数据等),手动推送服务

    NACOS 配置文件与服务监听 对于启动项目时可以检测的配置文件 修改配置文件时也可进入监听 对于服务监听时 项目启动时注册进nacos可以监听 修改服务时关闭服务时都可以监听 也可以手动推送服务到nacos上 添加nacos相关的配置文件
  • java.io.FileNotFoundException: class path resource [***] cannot be resolved to URL

    SpringBoot 集成FreeMarker 时出现如下错误信息 java io FileNotFoundException class path resource templates cannot be resolved to URL
  • Linux网络编程一步一步学 - 目录(汇总)zhuan

    非常好的关于Linux网络编程的文章 我也是无意中在别人的博客里发现的 在网上搜了一下 这类的文章总共还有很多篇 最后我找到了原作者的姓名 周立发 以及作者的博客空间 本人坚决支持原创 在此将其文章进行了汇总 并且空间首页加入了他的博客链接
  • 泛型方法使用

    Java中关于泛型方法中类型变量的确定 首先 在我们使用泛型的时候我们要显示的告诉编译器所要使用的具体类型 比如 新建了一个Integer类型的ArrayList 并在 lt gt 中指明了类型 ArrayList
  • 【GIN】上下文 bind的几种方法

    1 Bind var req vo RegisterRequest ctx Bind req It writes a 400 error and sets Content Type header text plain in the resp
  • VM虚拟机中的web服务内网穿透的设置,虚拟机连接主机的mysql(主机win10 虚拟机win10)

    前言 由于我的主机里环境弄得乱七八糟 无法正常使用阿帕奇 我又不想重置电脑 所以就想在虚拟机里配置环境 结果我的虚拟机无法安装mysql 于是就用虚拟机访问主机的mysql 我在虚拟机里部署的Flask项目 然后WEB服务器用的是阿帕奇2
  • 对于全连接层的理解 全连接层的推导

    全连接层的推导 全连接层的每一个结点都与上一层的所有结点相连 用来把前边提取到的特征综合起来 由于其全相连的特性 一般全连接层的参数也是最多的 全连接层的前向计算 下图中连线最密集的2个地方就是全连接层 这很明显的可以看出全连接层的参数的确
  • 等响度曲线_什么是“响度”

    转自 https blog csdn net weixin 36225384 article details 112220422 原文 https www tonmeister ca wordpress 2014 06 07 bo tech
  • 正则表达式 匹配美元等多种货币符号的超简单方法

    p Sc 带小数点也不怕 Symbol Meaning p a character with the xx property Sc Currency symbol 方法二 暴力匹配 正则表达式 xA2 xA5 u058F u060B u09
  • QT开发之QString转换之路

    编程中少不了字符串的使用 QT提供了QString变量类型 字符串链表可直接使用QStringList进行变量定义和声明 那如果使用了其他表示字符串的变量应该怎么相互转化呢 这里就列举几个常用的几个类型之间的转化 错误之处 还望指出批评 1