QString + CreateProcess. Передача кириличных символов

Пробую передать параметром командной строки кириличное слово, но в дочернем процессе при считывании получаю либо знаки вопроса либо слово iconengines. Не представляю даже что это значит. Вот код родителя:

STARTUPINFO sti;
PROCESS_INFORMATION pi;
string strCMD = "child.exe ";
strCMD = strCMD + ui->stop->text().toUtf8().constData() + " " + to_string(ui->morale->value());
wstring CommandLine(strCMD.begin(), strCMD.end());
LPWSTR lpwCmdLine = &CommandLine[0];
ui->statusBar->showMessage(QString::fromStdString(strCMD));
ZeroMemory(&sti, sizeof(STARTUPINFO));
sti.cb = sizeof(STARTUPINFO);
CreateProcess(NULL, lpwCmdLine, NULL, NULL, TRUE, CREATE_NEW_CONSOLE, NULL, NULL, &sti, &pi);

Считываю аргументы:

QString word = QString::fromStdString(argv[1]);
cout << word.toUtf8().constData() << endl;
// и таким способом, тот же результат
cout << argv[1];

Ответы (1 шт):

Автор решения: shumik_UA

Ошибка, как я понял схожа с переводом double в int и потом в float. QString имеет в себе строку символов Unicode. Когда мы конвертируем его в string то каким-то образом обрезаются символы (или повреждаются). И поврежденные символы записываем в wstring. Решением было создавать командную строку сразу в QString и потом конвертировать в wstring сразу функцией toStdWString:

STARTUPINFO sti;
PROCESS_INFORMATION pi;
QString strCMD = "child.exe ";
strCMD = strCMD + ui->stop->text() + " " + ui->morale->value();
wstring CommandLine = strCMD.toStdWString();
LPWSTR lpwCmdLine = &CommandLine[0];
ZeroMemory(&sti, sizeof(STARTUPINFO));
sti.cb = sizeof(STARTUPINFO);
CreateProcess(NULL, lpwCmdLine, NULL, NULL, TRUE, CREATE_NEW_CONSOLE, NULL, NULL, &sti, &pi);
→ Ссылка