Переделывать строки с std::string на QString может быть и не нужно: достаточно всем договориться, что в std::string может быть UTF-8 текст. Тогда уже нельзя полагаться на соответствие символ == элемент_string-а, т.е. у вас std::string будет хранить уже не символы, а байты (!) строки, и size() будет уже показывать количество байт. Если вас нужно только сохранять/загружать, то это как раз вам подойдет. Затем, чтобы запихнуть в контрол, делаете в нужных местах
str.toUtf8() и
QString::fromUtf8(...) и счастье.
Если вам нужно обрабатывать текст посимвольно, например вырезать подстроку, то без поддержки юникода вам ничего не сделать. В этом случае, либо юзайте QString в местах обработки текста, либо подключайте ICU.