Qstring到LPCWSTR

时间:2013-12-24 14:36:14

标签: qt

LPCWSTR path;

void WinApiLibrary::StartProcess(QString name)
{
    path = name.utf16();
    CreateProcess(path, NULL, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
}
  

C:\ kursovaya \ smc \ winapilibrary.cpp:21:错误:转换无效   'const ushort * {aka const short unsigned int *}'to'LPCWSTR {aka const   wchar_t *}'[-fpermissive]        path = name.utf16();

此代码在Qt 4.8中有效,但现在我有Qt 5.2并且此代码无效。这家伙怎么了?

4 个答案:

答案 0 :(得分:17)

我有同样的问题(我使用的是Qt 5.3),这就是我修复它的方法:

QString strVariable1;
LPCWSTR strVariable2 = (const wchar_t*) strVariable1.utf16();

答案 1 :(得分:5)

QString::utf16()返回const ushort*,与const wchar_t*不同,因此您有编译错误。

您可能正在使用/Zc:wchar_t进行编译。如果将其更改为/Zc:wchar_t-它应该有效,因为wchar_t类型在这种情况下变为typedef为16位整数。

在Visual Studio中:项目属性 - >配置属性 - > C / C ++ - >将WChar_t视为内置类型 - >否。

或者只是添加reinterpret_cast<LPCWSTR>

答案 2 :(得分:2)

I'm using Qt 5.2 and I had the same issue. This is how I fixed it:

QString sPath = "C:\\Program File\\MyProg";
wchar_t wcPath[1024];
int iLen = sPath.toWCharArray(wcPath);

答案 3 :(得分:0)

在 Qt 全局命名空间中,有宏 qUtf16Printable。然而,正如文档所述,这会产生一个临时的,所以请注意正确使用它。请注意,这是在 Qt5.7 中引入的。