Mało znam QT i nie wiem czy to pomoże.
Korzystam na windze z std::string i std::wstring jednocześnie.
Często przy zapisie do pliku w trybie std::ios::binary konwertuje z widen na narrow, bo są problemy z mieszaniem stringów i liczb.
Do pliku zapisuję char, a później odczytuję z pliku i konwertuję z powrotem do std::wstring
std::wstring_convert <locale>
<codecvt>
Kopiuj
#include <iostream>
#include <string>
#include <locale>
#include <codecvt>
auto main() -> int
{
std::wcout.imbue(std::locale("Polish_poland.852")); // ustawienie polskiej strony kodowej dla std::wcout (VS2015)
std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter;
std::wstring wstr{ L"ąęć" };
std::string str = converter.to_bytes(wstr);
std::wstring wstr2 = converter.from_bytes(str);
std::wcout << wstr << L'\n';
std::cout << str << '\n';
std::wcout << wstr2 << L'\n';
}