Discuz! Board

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1817|回复: 4
打印 上一主题 下一主题

Qt下 QString转char*

[复制链接]

388

主题

602

帖子

2218

积分

金牌会员

Rank: 6Rank: 6

积分
2218
跳转到指定楼层
楼主
发表于 2016-7-5 11:58:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

Qt下面,字符串都用QString,确实给开发者提供了方便,想想VC里面定义的各种变量类型,而且函数参数类型五花八门,经常需要今年新那个类型转换

Qt再使用第三方开源库时,由于库的类型基本上都是标准的类型,字符串遇的多的就是Char*类型

在Qt下怎样将QString转char*呢,需要用到QByteArray类,QByteArray类的说明详见Qt帮助文档。

因为char*最后都有一个‘/0’作为结束符,而采用QString::toLatin1()时会在字符串后面加上‘/0’

方法如下:

Qstring  str;

char*  ch;

QByteArray ba = str.toLatin1();   

ch=ba.data();

这样就完成了QString向char*的转化。经测试程序运行时不会出现bug

注意第三行,一定要加上,不可以str.toLatin1().data()这样一部完成,可能会出错。


补充:以上方法当QString里不含中文时,没有问题,但是QString内含有中文时,转换为char*就是乱码,采用如下方法解决:

方法1:

添加GBK编码支持:

#include <QTextCodec>

QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));
QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));

然后改变上面的第三行为:QByteArray ba = str.toLoacl8Bit();      toLoacl8Bit支持中文

方法2:

先将QString转为标准库中的string类型,然后将string转为char*,如下:

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

const char* ch = str.c_str();


回复

使用道具 举报

388

主题

602

帖子

2218

积分

金牌会员

Rank: 6Rank: 6

积分
2218
沙发
 楼主| 发表于 2016-7-20 14:25:26 | 只看该作者
QString -> string
QString text;
string strText;
strText = text.toLocal8Bit().data()


char* pt = (char*)data;

QString qs= QString::fromLocal8Bit(pt);




回复 支持 反对

使用道具 举报

388

主题

602

帖子

2218

积分

金牌会员

Rank: 6Rank: 6

积分
2218
板凳
 楼主| 发表于 2016-7-20 14:28:57 | 只看该作者
QByteArray与QString之间的转换
  1. QByteArray cstr("abcd");
  2. QString s = cstr;

  3. QByteArray cstr("abcd");
  4. QString s;
  5. s.prepend(cstr);

  6. QString s("hello");
  7. QByteArray cstr = s.toAscii();

  8. QString s("hello");
  9. QByteArray cstr = s.toLatin1();

复制代码
QByteArray类同样不以'\0'为结尾:如
  1. QByteArray s;
  2. s.resize(5);
  3. s[0] = '1';
  4. s[1] = '2';
  5. s[2] = '3';
  6. s[3] = '\0';
  7. s[4] = 'a';

  8. cout << s << endl;
复制代码

回复 支持 反对

使用道具 举报

388

主题

602

帖子

2218

积分

金牌会员

Rank: 6Rank: 6

积分
2218
地板
 楼主| 发表于 2016-8-26 16:31:23 | 只看该作者
QString 转 QBytearray
如果QString中存在中文,就使用toAscii()转换,如果只存在英文,使用toLatin1()即可
回复 支持 反对

使用道具 举报

1228

主题

1996

帖子

7572

积分

认证用户组

Rank: 5Rank: 5

积分
7572
5#
发表于 2020-2-15 15:45:50 | 只看该作者
QString stores a string of 16-bit QChars, where each QChar corresponds one Unicode 4.0 character.
QString存储一个16位QChars字符串,其中每个QChar对应一个Unicode 4.0字符。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|firemail ( 粤ICP备15085507号-1 )

GMT+8, 2024-4-25 12:55 , Processed in 0.061459 second(s), 18 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表