如何将PWSTR转换为QString以显示在列表框中

时间:2017-11-22 16:26:07

标签: c++ windows qt

我正在尝试在Qt上的列表框中显示文本。我知道Qt上的列表框只接受QString,所以我尝试使用这里的示例:How do I convert PWSTR to string in C++?并在转换为QString之前将其转换为wstring。 这样做,我在列表框中得到类似的东西:

ፉ靏Ť耀Ý

如果我在控制台上打印出来,它会给我我想要的东西。如何让它在列表框中正确显示。 如何让它正确显示在列表框中?

2 个答案:

答案 0 :(得分:3)

您应该使用QString的fromWCharArray静态函数:

wchar_t* my_string = ...;
QString qstring = QString::fromWCharArray(my_string);

请注意,如果my_string不是以空值终止的,fromWCharArray()有一个重载,它会为字符串长度采用第二个参数:

wchar_t* my_string = ...;
size_t my_len = ...;
QString qstring = QString::fromWCharArray(my_string, my_len);

答案 1 :(得分:1)

Steve Lorimers answer之外,我的MCVE

#include <QtWidgets>
#include <shlobj.h>

int main()
{
  qDebug() << "Qt Version: " << QT_VERSION_STR;

  wchar_t *localAppData = nullptr;
  SHGetKnownFolderPath(FOLDERID_LocalAppData, 0, NULL, &localAppData);

  QString qStr = QString::fromWCharArray(localAppData);
  CoTaskMemFree(static_cast<void*>(localAppData));

  qDebug() << "localAppData (as QString):" << qStr;
  return 0;
}

使用VS2013进行编译和测试:

Qt Version:  5.9.2
localAppData (as QString): "C:\\Users\\Scheff\\AppData\\Local"

分别函数是QString::fromWCharArray()