Компиляция проходит нормально, однако во время работы программы возникла следующая ошибка:
Имя папки пользователя, если оно написано кириллицей, отображается кракозябрами и программа не находит папку пользователя.
Входные данные:
ОС Windows 7
Qt 5.6
Компилятор msvc2015 (32bit/64bit)
В процессе поиска решения проблемы выяснил, что помимо этой ошибки так же с кракозябрами отображаются пути QStandardPaths, а так же в "int main(int argc, char *argv[])", если argv содержит путь на передаваемый внешне файл и он лежит в папке пользователя, то он так же отображается кракозябрами.
Протестировав на отдельном проекте выяснил, что при компиляции в MinGW этой проблемы не возникает, однако в проекте используется webenginewidgets, потому компилятор MinGW не подходит. Однако отсюда
видно, что проблема в компиляторе msvc2015, определить которую мне не удалось!
Пробовал:
- Переустанавливать Qt
- Переустанавливать Visual Studio
результат тот же.
Дополнительные данные/результаты:
- Другие приложения написанные на Qt (не мной) на моём компьютере работают нормально.
- В самом приложении кириллица отображается корректно, никаких проблем нет.
- При компиляции relise версии тоже самое.
- В последствии выяснил, что папка с кракозябрами создаётся в системе(при этом ошибка остаётся), но если её удалить, то появляются новые ошибки уже в компиляторе:
- Прогуглив массу русско- и англо- язычных ресурсов нашёл лишь пару упоминаний этой проблемы и ни одного решения. Максимум рекомендации использовать MinGW, что мне не подходит.
Предполагаю, что, возможно, ответа нет потому, что решение слишком банально, однако увы мне не удалось выяснить причину самостоятельно.
Возможно у MSVC проблемы с кодировкой UTF8? Тогда как её разрешить...
Заранее благодарен всем, кто предложит способы решения моей проблемы.
Дополнительно код программы с проблемой:
файл test.proTEMPLATE = app
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
CONFIG += c++11
TARGET = test
SOURCES += main.cpp
Файл main.cpp#include <QApplication>
#include <QString>
#include <QMessageBox>
#include <QFileDialog>
#include <QStandardPaths>
using namespace std;
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
/*первый тест проблемы*/
QString file=QFileDialog::getOpenFileName(0,"Select file",QString(getenv("PROGRAMFILES")),"(*.exe)");
/*второй тест проблемы*/
QString addin_path = QStandardPaths::writableLocation(QStandardPaths::DataLocation);
QMessageBox msgBox;
msgBox.setIcon(QMessageBox::Warning);
msgBox.setWindowFlags(Qt::CustomizeWindowHint);
msgBox.setWindowTitle("Information");
msgBox.setText(addin_path);
msgBox.exec();
return a.exec();
}
Результаты работы этой программы:
первый пример проблемывторой пример проблемы