QT开发之QString转换之路

编程中少不了字符串的使用,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

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值