参考资料:

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宏的设置

 #include <iostream>

 #include <Windows.h>
#include <QtCore/QtCore> #ifdef UNICODE
#define FILE_NAME "数据.txt"
#else
#define FILE_NAME "data.txt"
#endif int main()
{
QString szqFileName = QString::fromLocal8Bit(FILE_NAME);
qint64 nLen = szqFileName.length();
//
// QString to TCHAR*
//
LPCTSTR szFileName = NULL;
#ifdef UNICODE
szFileName = (wchar_t*)szqFileName.utf16();
#else
QByteArray byteArray = szqFileName.toLocal8Bit();
szFileName = byteArray.constData();
#endif // UNICODE
//
// Create file
//
HANDLE hFile = ::CreateFile(szFileName, GENERIC_WRITE, , NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile == INVALID_HANDLE_VALUE)
std::cout << "Cannot create file." << std::endl;
else
std::cout << "File created." << std::endl;
::CloseHandle(hFile);
//
// TCHAR* to QString
//
szFileName = TEXT(FILE_NAME);
#ifdef UNICODE
szqFileName = QString::fromUtf16((ushort*)szFileName);
#else
szqFileName = QString::fromLocal8Bit(szFileName);
#endif
QFile file(szqFileName);
if (!file.remove())
std::cout << "Cannot remove file." << std::endl;
else
std::cout << "File removed." << std::endl; return ;
}

QString 和 TCHAR 的相互转换的更多相关文章

  1. 【转】QT QString, wchar_t *, TCHAR, CString和其他字符或字符串类型的转化

    //QString to wchar_t *: const wchar_t * encodedName = reinterpret_cast<const wchar_t *>(fileNa ...

  2. QT5中QString与char *的相互转换

    以例子说明: #include <QApplication> #include <QDebug> #include <QString> #include <Q ...

  3. QString与char*的相互转换

    原地址:http://blog.sina.com.cn/s/blog_5c70dfc80100r0nh.html 一.QString转char*   QString str; int num=0; s ...

  4. QString与string的相互转换

    1.QString转换String string s = qstr.toStdString(); 2.String转换QString QString qstr2 = QString::fromStdS ...

  5. QString与string的相互转换【转载】

    文章转载自https://blog.csdn.net/qq_33485434/article/details/80680506 1.QString转换String string s = qstr.to ...

  6. Qt QString 和 LPCWSTR 的相互转换

    在windosw 编程中,常用到LPCWSTR 变量,QT中最常用到QString,下面提供QString和LPCWSTR 相互转换的方法 LPWSTR 转换成QString LPCWSTR str; ...

  7. QString, string, int, char* 之间相互转换

    这三种数据类型在实际运用中经常需要互相转换,那么这里小结下它们之间的转换方法: - Qstring & string Qt中封装的类十分强大,其成员函数数量之多比STD有过之而无不及,许多程序 ...

  8. 【原创】<Debug> QString

    [问题1] 'class QString' has no member named 'toAscii' [解答] 把toAscii().data()改成toLatin1().data() 如果QStr ...

  9. QString转换为LPTSTR(使用了reinterpret_cast,真是叹为观止,但是也开阔了思路),三篇文章合起来的各种转换方法

    醉了,windows下宏定义了很多char类型 LPTSTR .今天,直接使用,qt报错,真TM费事. 将“CPU”转化为wcha_t * QString str = "CPU"; ...

随机推荐

  1. A trip through the Graphics Pipeline 2011_03

    At this point, we’ve sent draw calls down from our app all the way through various driver layers and ...

  2. 背景图片与 CSS的那些事

    在CSS中,背景图片的定位方法有3种: 1)关键字:background-position: top left; 2)像素:background-position: 0px 0px; 3)百分比:ba ...

  3. sqrt函数实现

    感谢杨工,让我更加认识到自己技术薄弱,这道题源自于和杨工的非正式面试,当时根本没思路,甚至没和查找有丝毫的联系,看来做自己想做的还是要付出努力的.sqrt()即开平方运算,y=x*x,已知Y的情况下求 ...

  4. JavaScript数据类型(转)

    JavaScript中有5种简单数据类型(也称为基本数据类型):Undefined.Null.Boolean.Number和String.还有1种复杂数据类型——Object,Object本质上是由一 ...

  5. 实时查看linux网卡流量

    将下列脚本保存为可执行脚本文件,比如叫traff.sh. 1.本脚本可自定义欲查看接口,精确到小数,并可根据流量大小灵活显示单位. 2.此脚本的采集间隔为1秒. 3.此脚本不需要额外再安装软件,可在急 ...

  6. [转载]:Delphi xe7并行编程快速入门

    现在多数设备.计算机都有多个CPU单元,即使是手机也是多核的.但要在开发中使用多核的优势,却需要一些技巧,花费时间编写额外的代码.好了,现在可以使用Delphi做并行编程了. 在Delphi.C++ ...

  7. 【php学习】数组操作

    1.json字符串和数组之间的转换 json_decode($jsonStr)      json字符串解码为php变量,若第二个参数默认为false,返回一个对象:若第二个参数设置true,则返回一 ...

  8. js中json字符串转成js对象

    json字符串转成js对象我所知的方法有2种: //json字符串转换成json对象 var str_json = "{name:'liuchuan'}"; //json字符串 / ...

  9. linux 冒号的用途

    用途说明 我们知道,在Linux系统中,冒号(:)常用来做路径的分隔符(PATH),数据字段的分隔符(/etc/passwd)等.其实,冒号(:)在Bash中也是一个内建命令,它啥也不做,是个空命令. ...

  10. nusoap

    PHP SOAP服务器 用PHP和NuSoap来建立SOAP服务器非常容易.基本上,你只要写出你想要暴露给你的Web services的函数,然后用NuSoap去注册它们就可以了.OK,另外还需要两步 ...