Qt的QString数据类型转换(整理)

一、Qt的数据类型有那些?

QT的基础数据类型 点击这里查看

这里只是列举一些常用的,转换函数用法其实都是相似的,剩下的还是得自己翻文档罗。

二、QString与数字之间的转换:

1. QString转数字

1.1 QString --> int

int QString::toInt(bool * ok = 0, int base = 10) const


转换发生错误或者转换不成功ok指针值(第一个参数)为false;发生错误时,返回值为0。base 为转换进制
该方法有很大的局限性,要转换的字符串中只能有0-9的字符组成,如果含有其他字符,转换将会失败

1.2 QString --> double

double QString::toDouble(bool * ok = 0) const


转换发生错误,或者转换不成功ok为false;发生错误时,返回值为0.0。
支持将科学计数法转成double,不支持处理千组分隔符。

1.3 QString --> float

float QString::toFloat(bool * ok = 0) const


转换发生错误,或者转换不成功ok为false;发生错误时,返回值为0.0。

1.4 例子:

	QString str = "11.55";
    bool ok;

    int a = str.toInt(&ok);
    
	//当str出现除了0-9这些数字的其他符号(不包括" - "),将会转换失败,即只支持整数的转换
	//str = "11"   true  
	//str = "-11"  true
    qDebug() << ok << " a =" << a;		//false a = 0


    double b = str.toDouble(&ok);

    qDebug() << ok << " b =" << b;		//true b = 11.55


    float c = str.toFloat(&ok);

    qDebug() << ok << " c =" << c;		//true c = 11.55

2. 数字转QString

下面介绍的转换成QString是用了同一个函数不同的重载而已。

2.1 int --> QString

QString QString::number(int n, int base = 10) [static]


n为需要转换的数字,base转换进制

2.2 double/folat --> QString

QString QString::number(double n, char format = ‘g’, int precision = 6) [static]


n为需要转换的数字;format格式,根据指定的格式和精度进行格式化;precision 精度,默认精度为6

2.3 setNum() 有多个重载

QString & QString::setNum(int n, int base = 10)


将n以base进制转为QString

2.3 例子:

	int a = 123;
    double b = 123.456;
    float c = 465.12;

    QString strA = QString::number(a);

    qDebug() << "strA = " << strA;			//strA =  "123"


    QString strB = QString::number(b);

    qDebug() << "strB = " << strB;			//strB =  "123.456"


    QString strC = QString::number(c);

    qDebug() << "strC = " << strC;			//strC =  "465.12"

	QString strD;
	strD.setNum(a);							//strD = "123"

三、QDateTime 与 QString之间的转换

1.日期格式

ExpressionOutput
d不带前导零的日(1到31)
dd以零开头的数字表示的日期(01到31)
ddd缩写的本地化日名称(例如,“Mon”到“Sun”)。使用系统区域设置本地化名称,即QLocale::system()
dddd长的本地化日名称(例如,“Monday”到“Qt::Sunday”)。使用系统区域设置本地化名称,即QLocale::system()
M不带前导零的月份(1-12)
MM月份作为数字,前导零(01-12)
MMM简略的本地化月份名称(例如“Jan”到“Dec”)。使用系统区域设置本地化名称,即QLocale::system()
MMMM本地化的长月份名称(例如“一月”到“十二月”)。使用系统区域设置本地化名称,即QLocale::system()
yy年份为两位数(00-99)
yyyy四位数年份

2.时间格式

ExpressionOutput
h没有前导零的小时(如果显示AM/PM,则为0到23或1到12)
hh前导零的小时(如果显示AM/PM,则为00到23或01到12)
H没有前导零的小时(0到23,即使有AM/PM显示)
HH前导零的小时(00到23,即使有AM/PM显示)
m没有前导零的分钟(0到59)
mm前导零的分钟(00到59)
s没有前导零的秒(0到59)
ss前导零的秒(00到59)
z不带前导零的毫秒(0到999)
zzz带前导零的毫秒(000到999)
AP or A使用AM/PM显示器。A/AP将替换为“AM”或“PM”。
ap or a使用am/pm显示器。a/ap将替换为“am”或“pm”。
t时区(例如“CEST”)

3.QDateTime --> QString

QString QDateTime::toString(const QString & format) const


format:指定格式

例子:

	QString str;

	//需要包含头文件 #include <QDateTime>
    QDateTime Mytime;

	//获取本地(本机)当前时间
    Mytime = QDateTime::currentDateTime();
	//按指定格式,转化字符串
    str = Mytime.toString("yyyy-MM-dd HH:mm:ss");

    qDebug() << str;	//"2019-11-20 16:11:08"

4.QString --> QDateTime

QDateTime QDateTime::fromString(const QString & string, Qt::DateFormat format = Qt::TextDate) [static]


string 是需要转换的字符串,format 是格式

例子:

	QString str = "2019-11-20 16:39:00";

    QDateTime MyTime;

    MyTime = QDateTime::fromString(str,"yyyy-MM-dd HH:mm:ss");

    qDebug() << MyTime;	
    //输出结果为:QDateTime("2019-11-20 16:39:00.000 中国标准时间 Qt::LocalTime")

四、QString 与 QByteArray之间的转换

1. QString --> QByteArray

1.1 toLatin1()

QByteArray QString::toLatin1() const


以QByteArray的形式返回字符串的Latin-1表示形式。
如果字符串包含非拉丁字符,则返回的字节数组未定义。这些字符可以被取消或用问号代替
不支持中文,包含中文会乱码

1.2 toUtf8()

QByteArray QString::toUtf8() const


以QByteArray的形式返回字符串的UTF-8表示形式。
UTF-8是一个Unicode编解码器,可以像QString一样表示Unicode字符串中的所有字符
支持中文,不支持宽字符

1.3 toLocal8Bit()

QByteArray QString::toLocal8Bit() const


以QByteArray的形式返回本地操作系统设置的字符集编码。支持中文,在使用toUtf8()函数转换有问题的时候就可以使用这个函数,支持宽字符

1.3 例子

	QString str = "My name is Li Hua哈";

    QByteArray MyByteArray;

    MyByteArray = str.toLatin1();

	//"str = My name is Li Hua MyByteArray = My name is Li Hua?"
	//有中文会乱码
    qDebug() << "str = " << str << " MyByteArray = " << MyByteArray;

    MyByteArray = str.toUtf8();
	
	//"str = My name is Li Hua MyByteArray = My name is Li Hua哈"
    qDebug() << "str = " << str << " MyByteArray = " << MyByteArray;

2. QByteArray --> QString

QString::QString(const QByteArray & ba)


QString的构造函数,使用ba构造一个QString

五、QString 与 char * 之间的转换

1. QString --> char *

1.1 QString --> QByteArray --> char *

例子:

	QString str = "My name is Li Hua 哈哈";

	//由于使用了toLatin1转换的不支持中文,包含的中文会乱码,所以我使用了toUtf8
	//但是我上网搜了一下,好像没有人会这样转Char *,是不是有什么风险?这个本人就不得而知,测试结果是真香可观
    QByteArray MyByteArray = str.toUtf8();
	
    char *myChar = MyByteArray.data();
    qDebug() << myChar;

	//下面这个写法是错误的,不能串行写。
	//myChar = str.toUtf8().data();
    //qDebug() << myChar

从QByteArray转到char *的时候用到了data()

char * QByteArray::data()


返回char * ,以’\0’结尾的数据,即返回的字符串中的字节数是size() + 1,代表’\0’结尾.

上方例子中提到了不能串行写,这是为啥?
这里解释了为啥不能这样写

1.2 QString --> std::string --> char *

例子:

	QString str = "My name is Li Hua 哈哈";

	std::string myStr = str.toStdString();

    const char * myChar = myStr.c_str();

    qDebug() << myChar;

std::string QString::toStdString() const


1.返回一个std::string对象,其数据包含在这个QString中。
2.使用toUtf8()函数将Unicode数据转换为8位字符。
3.这个操作符主要用于将QString传递给接受std::string对象的函数。
4.如果QString包含非latin1 Unicode字符,那么使用它可能会导致信息丢失

使用 c_str() 转换过来的char * 是带const 修饰的,如果想要去掉const修饰,请使用
在这里插入图片描述
对它进行转换。

	char * myCharStr = const_cast<char *>(myChar);

2. char * --> QString

直接调用QString的构造函数

QString(const char * str)


将str构造一个QString对象。

六、字符串转ASCII16进制

Qt将字符串快速转换为ASCII码16进制字符串

QByteArray中的 toHex() 函数,将字符串转为ASCII码16进制字符串。

QString stringToAsicc(QString){
	QByteArray array = QString.toUtf8();
	return array.toHex();
}

将ASCII码16进制字符串转为 “字符串”

QString asiccToString(QByteArray array){
	return QByteArray::fromHex(array);
}

QString asiccToString(QString str){
	return QByteArray::fromHex(str.toUtf8());
}
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值