QString 和 TCHAR 的相互转换

摘要:
constchar*szName=szqFileName.toLocal8Bit().constData();constchar*szName=ba.constData();关于UNICODE宏设置1#include&lt:4#include<20#ifdefUNICODE21szFileName=(wchar_t*)szqFileName.utf16();

参考资料:

http://www.cnblogs.com/fuyanwen/p/3200536.html
http://www.cnblogs.com/wendao/archive/2012/07/27/2612597.html

不能直接用:

QString szqFileName = QString::fromLocal8Bit("data");
const char* szName = szqFileName.toLocal8Bit().constData(); // 返回的 QByteArray 被析构掉了, szName 会指向无效的内存区

正确的做法:

QString szqFileName = QString::fromLocal8Bit("data");
QByteArray ba = szqFileName.toLocal8Bit();
const char* szName = ba.constData();

代码(在我的系统上, Win7 x64. CHS. 第21, 40行如果我用utf8的话就会乱码), 下载DEMO:

注: 关于UNICODE宏的设置

 1 #include <iostream>
 2 
 3 #include <Windows.h>
 4 #include <QtCore/QtCore>
 5 
 6 #ifdef UNICODE
 7 #define FILE_NAME "数据.txt"
 8 #else
 9 #define FILE_NAME "data.txt"
10 #endif
11 
12 int main()
13 {
14     QString szqFileName = QString::fromLocal8Bit(FILE_NAME);
15     qint64 nLen = szqFileName.length();
16     //
17     // QString to TCHAR*
18     //
19     LPCTSTR szFileName = NULL;
20 #ifdef UNICODE
21     szFileName = (wchar_t*)szqFileName.utf16();
22 #else
23     QByteArray byteArray = szqFileName.toLocal8Bit();
24     szFileName = byteArray.constData();
25 #endif // UNICODE
26     //
27     // Create file
28     //
29     HANDLE hFile = ::CreateFile(szFileName, GENERIC_WRITE, 0, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL);
30     if (hFile == INVALID_HANDLE_VALUE)
31         std::cout << "Cannot create file." << std::endl;
32     else
33         std::cout << "File created." << std::endl;
34     ::CloseHandle(hFile);
35     //
36     // TCHAR* to QString
37     //
38     szFileName = TEXT(FILE_NAME);
39 #ifdef UNICODE
40     szqFileName = QString::fromUtf16((ushort*)szFileName);
41 #else
42     szqFileName = QString::fromLocal8Bit(szFileName);
43 #endif
44     QFile file(szqFileName);
45     if (!file.remove())
46         std::cout << "Cannot remove file." << std::endl;
47     else
48         std::cout << "File removed." << std::endl;
49     
50     return 0;
51 }

免责声明:文章转载自《QString 和 TCHAR 的相互转换》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇001NodeJS的http.Request返回数据详解Redis安装配置及使用详解下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

简单的图像相似度计算方法

目录 塑料瓶图像检测 说明 1.方法 2.测试结果(单张图片比对) 直方图 互信息 余弦相似度 感知哈希算法 3.评价 塑料瓶图像检测 目的:用于判断一张图片是否为塑料瓶; 条件:总计300多张图片分为70多类,同一类塑料瓶分别放置在同一个文件夹; 思路:选取每个文件夹的一张图片与目标图片对比计算返回相似度最高的值,通过多次试验确定阈值,...

基于WPF系统框架设计(6)-整合MVVM框架(Prism)

应用场景 我们基础的框架已经搭建起来了,现在整合MVVM框架Prism,在ViewModel做一些逻辑处理,真正把界面设计分离出来。 这样方便我们系统开发分工合作,同时提高系统可维护性和灵活性。 具体的Prism安装和Microsoft.Practices.Prism.dll获取,在这个网址:http://compositewpf.codeplex.com...

vmware 下找不到ifcfg-eth0的问题

找不大 eth0网卡,也就连不上网络,症状是ifconfig以后只现实lo,不显示eth0 ifconfig,显示的ip是ifcfg-lo的ip 解决办法 1. 拷贝cp ifcfg-lo ifcfg-eth0 2. 重新配置ifcfg-eth0如下 DEVICE="eth0" BOOTPROTO="static" NM_CONTROLLED="ye...

【转】WPF自定义控件与样式(8)-ComboBox与自定义多选控件MultComboBox

一.前言   申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等。   本文主要内容: 下拉选择控件ComboBox的自定义样式及扩展; 自定义多选控件MultiComboBox; 二.下拉选择控件ComboBox的自定义样式及扩展 2.1基本样式   先看看基础效果图:     从功能上ComboBo...

微信默认表情符号的代码对照表

之前有不少朋友问我,微信公众平台如何发带有表情符号的图片,其实只需要在信息里面插入表情代码就可以使用的。 微信表情对照表如下: 表情图片 字符串代码 替换关键字 /::) 微笑 /::~ 伤心 /::B 美女 /::| 发呆 /:8-) 墨镜 /::< 哭 /::$ 羞 /::X 哑 /::...

MyBatis-Spring--SqlSessionTemplate实现增删改查(批量操作)

ssionTemplate是个线程安全的类,每运行一个SqlSessionTemplate时,它就会重新获取一个新的SqlSession,所以每个方法都有一个独立的SqlSession,这意味着它是线称安全的。 第一步:创建spring-mybatis.xml文件并配置数据源 这里使用DBCP数据库连接池的方式: <!-- 第一步:配置数据源--使用...