删除Unicode定义后无法将QString转换为TCHAR

时间:2018-07-31 08:26:13

标签: c++ qt

以前,当我声明unicode时,我无法执行以下操作

sig1 = rand(100,1);
sig2 = [rand(50,1); sig1(end-10:end); rand(50,1)]; % a signal with imposed intersection.

idx = ismember(sig1,sig2); %multiple occurences variant of IA in [C,IA,IB]=intersect(sig1,sig2)
inter = sig1(idx) %The intersection

但是在我删除了我的未定义代码之后 我遇到以下错误

QString myPassword = "123";
TCHAR szPassword[32];

myPassword.toWCharArray(szPassword);

我现在如何将我的Qstring转换为TCHAR数组?

1 个答案:

答案 0 :(得分:0)

Qt提供了几种在Windows标准的QString和UTF16-LE之间转换的方法:

转换为C ++ std::wstring

QString myPassword = "abcd ελληνικά";
std::wstring wstr = myPassword.toStdWString();
MessageBoxW(0, wstr.c_str(),0,0);

要使用toWCharArray,输入缓冲区必须有足够的内存并且必须以空值结尾:

wchar_t buf[100] = {0};
myPassword.toWCharArray(buf);
MessageBoxW(0, buf,0,0);

或使用返回QString::utf16()的{​​{1}}方法,它需要const unsigned short*强制转换:

const wchar_t*

请注意,MessageBoxW(0, (const wchar_t*)myPassword.utf16(), 0, 0); 是一个令人困惑的Windows宏,对于ANSI程序,它定义为TCHAR,对于Unicode程序,它定义为char。避免使用它。