QString 和 TCHAR 的相互转换
2015-11-17 22:28
369 查看
参考资料:
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宏的设置
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, 0, 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 0; }
相关文章推荐
- Android设计模式-----依赖注入
- Cocos2dx-OpenGL ES2.0教程:编写自己的shader(2)
- 关于python 科学计算库的下载
- 机器学习分类算法应该如何选择?
- 内部类(转)
- (转载)Cocos2dx-OpenGL ES2.0教程:编写自己的shader(2)
- UI基础__ NSMutableAttributedString
- java 解析properties文件的两种方法
- chrome调试webview
- DOS之创建项目之目录架构
- LeetCode Kth Largest Element in an Array (快速排序)
- slack机器人运维
- 对java servlet 单例模式的理解
- 【南大软院大神养成计划】html+css之css
- LeetCode80——Remove Duplicates from Sorted Array II
- 数据结构与算法(1)--指针复习
- SQL基础(1)-创建及修改表
- WIN7下双mysql安装
- Java other
- HashMap的那些事