我正在尝试转换以下QString
:
QString nom, prenom, promo;
...
QString modelName = nom + "_" + prenom + "_" promo;
变成
LPTSTR
。到目前为止,我已经使用了:
LPTSTR mm = (LPTSTR) modelName.utf16();
但是返回的
LPTSTR
仅包含QString
的第一个字符。我尝试了很多方法,包括通过char *
,但没有任何效果。我应该怎么做才能将完整的QString放入LPTSTR 中?
最佳答案
如果LPTSTR mm = "TEST CODE"
运行良好,则在您的项目中使用sizeof(TCHAR)==1
。 ASCII UTF16编码的字符串的小端存储布局为:
xx 00 xx 00 xx 00 xx 00 ...
因此,使用单字节
TCHAR
时,您的UTF-16字符串被解释为单个字符串。第一个零字节将其终止。有两种方法可以解决此问题:
TCHAR
,您需要为整个项目定义UNICODE
。您可以添加DEFINES += UNICODE
到您的qmake项目文件,或添加
#define UNICODE
作为代码的第一行,在每个 header 和.cpp文件中。
TCHAR
,则需要按以下方式获取它们:QString modelName = ...;
QByteArray modelNameLocal = modelName.toLocal8Bit();
LPTSTR mm = (LPTSTR)modelNameLocal.data();
只要
mm
在范围内,modelNameLocal
值将保持有效。您需要小心确保只要使用mm
,底层字节数组也必须存在。