我正在尝试转换以下QString
:
QString nom, prenom, promo;
...
QString modelName = nom + "_" + prenom + "_" promo;
加入LPTSTR
。
到目前为止,我已经使用了这个:
LPTSTR mm = (LPTSTR) modelName.utf16();
但是返回的LPTSTR
仅包含QString
的第一个字符。我尝试了很多方法,包括通过char *
,但没有任何效果。
如何才能将完整的QString带入LPTSTR ?
答案 0 :(得分:2)
如果LPTSTR mm = "TEST CODE"
效果很好,那么在您的项目中sizeof(TCHAR)==1
。 ascii UTF16编码字符串的小端内存布局是:
xx 00 xx 00 xx 00 xx 00 ...
这就是为什么,使用单字节TCHAR
,您的UTF-16字符串被解释为单个字符串。第一个零字节终止它。
这个问题有两种解决方案:
要使用UTF-16 TCHAR
,您需要为整个项目定义UNICODE
。您可以添加
DEFINES += UNICODE
到您的qmake项目文件,或添加
#define UNICODE
作为代码的第一行,在每个标题和.cpp文件中。
如果您真的希望使用本地编码的字节范围TCHAR
,那么您需要按如下方式获取它们:
QString modelName = ...;
QByteArray modelNameLocal = modelName.toLocal8Bit();
LPTSTR mm = (LPTSTR)modelNameLocal.data();
只要mm
在范围内,modelNameLocal
值就会一直有效。您需要注意确保只要使用mm
,基础字节数组也必须存在。