参考资料:

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. portable runtime

    APR The mission of the Apache Portable Runtime (APR) project is to create and maintain software libr ...

  2. twitter storm源码走读之4 -- worker进程中线程的分类及用途

    欢迎转载,转载请注明出版,徽沪一郎. 本文重点分析storm的worker进程在正常启动之后有哪些类型的线程,针对每种类型的线程,剖析其用途及消息的接收与发送流程. 概述 worker进程启动过程中最 ...

  3. ThinkPHP 学习笔记 ( 二 ) 控制器 ( Controller )

    /** * ThinkPHP version 3.1.3 * 部署方式:应用部署 * 文内的 http://localhost/ 由实际主机地址代替 */ 入口文件 index.php: <?p ...

  4. 用diss 实现 push动画

    -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { AAAViewController * aaa = [[AAAVie ...

  5. 提高Vector容器的删除效率

    vector容器是类似与一个线性数组,索引效率高,插入,删除的效率很低,需要遍历数据列表,一般情况下vector的删除操作由一下函数完成: iterator erase(iterator positi ...

  6. Class 实现IDisposing方法

    public class MyResourceHog : IDisposable  {   // 已经被处理过的标记   private bool _alreadyDisposed = false;  ...

  7. mysqli_query($link,'SET group_concat_max_len=8192');

    mysqli_query($link,'SET group_concat_max_len=8192'); $sql = 'SELECT GROUP_CONCAT(w) FROM ---'; mysql ...

  8. Shared libraries

    Computer Systems A Programmer's Perspective Second Edition Shared libraries are modern innovations t ...

  9. 6严格的HTML:遵循标准,合乎规范

    标准的网页加载速度更快,并且在其他一些冲浪设备(如电话和电视)上运行地更好.如果没有告诉浏览器使用的HTML版本,许多浏览器将使用"转换显示"模式,而这可能会导致在不同浏览器有不一 ...

  10. jboss4.2.3建立oracle JMS应用

    一.基本配置 1 增加oracle驱动文件,ojdbc6.jar,不能使用小于该版本的jdbc驱动,jboss-4.2.3.GA\server\default\lib 2 增加retrotransla ...