1

我正在尝试转换以下内容QString

QString nom, prenom, promo;
...
QString modelName = nom + "_" + prenom + "_" promo;

变成一个LPTSTR.

到目前为止,我已经使用了这个:

LPTSTR mm = (LPTSTR) modelName.utf16();

LPTSTR返回的仅包含QString. 我尝试了很多方法,包括通过 a char *,但没有任何效果。

我应该怎么做才能将完整的 QString 放入 LPTSTR

4

1 回答 1

2

如果LPTSTR mm = "TEST CODE"运行良好,那么在您的项目中将sizeof(TCHAR)==1. ascii UTF16 编码字符串的小端内存布局为:

xx 00 xx 00 xx 00 xx 00 ...

这就是为什么使用 single-byteTCHAR时,您的 UTF-16 字符串会被解释为单个字符串。第一个零字节终止它。

这个问题有两种解决方案:

  1. 要使用 UTF-16 TCHAR,您需要UNICODE为整个项目定义。您可以添加

    DEFINES += UNICODE
    

    到您的 qmake 项目文件,或添加

    #define UNICODE
    

    作为代码的第一行,在每个头文件和 .cpp 文件中。

  2. 如果您确实希望使用本地编码的 byte-wide TCHAR,则需要按如下方式获取它们:

    QString modelName = ...;
    QByteArray modelNameLocal = modelName.toLocal8Bit();
    LPTSTR mm = (LPTSTR)modelNameLocal.data();
    

    mm只要modelNameLocal在范围内,该值将保持有效。您需要小心确保只要mm使用了,底层字节数组也必须存在。

于 2014-07-01T12:11:40.807 回答