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并且此代码无效。这家伙怎么了?
答案 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 中引入的。