"Мои данные поступают из базы данных, и я знаю, что строка, которую я получаю в Qt, верна (байты такие же, как в базе данных)."
Как вы это проверили?Попробуйте с chineseChar.toUtf8 (). ToHex ().
Когда ваши строковые данные находятся в QString, все элементы пользовательского интерфейса, принимающие QString, будут обрабатывать его правильно.Обычно ошибка возникает при преобразовании данных простого текста (const char * / QByteArray) в QString.Преобразования здесь:
ui->plainTextEdit->appendPlainText(chineseChar.toUtf8()); // doesn't work
ui->plainTextEdit->appendPlainText(QString::fromUtf8(chineseChar.toAscii()); // doesn't work
преобразуют строку Unicode в байтовый массив, а затем неявно обратно в QString, поскольку эти методы ожидают QString.Я предлагаю вам определить QT_NO_CAST_FROM_ASCII и QT_NO_CAST_TO_ASCII, чтобы избежать нежелательных преобразований QByteArray <-> QString.
Если строка неверна, ошибка обычно возникала до , при преобразовании из QByteArray / constв QString, т.е. в query.value (fieldNo) .toString ().Попробуйте:
QString chineseChar = QString::fromUtf8( query.value(fieldNo).toByteArray() );
Если это не поможет, проблема где-то в QtSQL, предполагающем неправильную кодировку для данных, которые он получает из базы данных.