Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Hero Sanya от Июнь 13, 2020, 07:20



Название: Русский язык в qt. Как локализировать выполнения функций.
Отправлено: Hero Sanya от Июнь 13, 2020, 07:20
Искал локализейт для qt и нашёл две строчки, одна из которых по идеи делает setlocate для qt, а вторая, ну просто для проверки.
Я сделал из этого кнопку, которая заменяет лэйбл на фразу во второй строчке. Но к сожалению, как была каша из символов, так и остаётся.
Сразу скажу, что мне локализация нужна, например чтобы считывать с полей русские слова, используя их как название будущего файла, переваривать в путь и формат файла(собственно это делать я знаю как, но попытка ввести русское слово в поле, собственно не переварит всё что написано на кириллице(получится какой нибудь D/file/СѓСЃСЃРєРёР№.txt).
Насколько я понял, не переваривание происходит уже тогда, когда мы берём и записываем в string'овую переменную с любого лейбла или поля(то есть и весь остальной функционал, кроме вставок в саму программу, то есть в редакторе форм/действий) будет искажён.
Я бы хотел чтобы Любые считывания или записи могли делаться на русском.
Код:
#include <QTextCodec>
void MainWindow::on_pushButton_2_clicked()
{
    QTextCodec::setCodecForLocale(QTextCodec::codecForName("Windows-1251")); //Найденные
    QString cyrillicName = QString::fromLocal8Bit("словоНаКириллице");                   //строчки
    ui->label->setText(cyrillicName);
}


Название: Re: Русский язык в qt. Как локализировать выполнения функций.
Отправлено: kambala от Июнь 13, 2020, 10:42
сохраняй исходный файл в кодировке UTF-8 и проблем с русскими словами в коде не будет:
Код
C++ (Qt)
auto rusStr = QStringLiteral("привет");


Название: Re: Русский язык в qt. Как локализировать выполнения функций.
Отправлено: Hero Sanya от Июнь 13, 2020, 11:58
сохраняй исходный файл в кодировке UTF-8 и проблем с русскими словами в коде не будет:
Код
C++ (Qt)
auto rusStr = QStringLiteral("привет");
Так, ну применилась эта штука удачно. Только вот, что такое auto? Это тип данных?


Название: Re: Русский язык в qt. Как локализировать выполнения функций.
Отправлено: kambala от Июнь 13, 2020, 12:14
по-моему тебе уже неоднократно говорили изучать С++ :) https://en.cppreference.com/w/cpp/language/auto


Название: Re: Русский язык в qt. Как локализировать выполнения функций.
Отправлено: Hero Sanya от Июнь 14, 2020, 14:33
по-моему тебе уже неоднократно говорили изучать С++ :) https://en.cppreference.com/w/cpp/language/auto
Да, я учу си++ и qt. Но кроме как посмотреть все видюшки с ютуба и тыкаться в документации, иного способа кроме как задавать свои вопросы на форумах и везде в надежде что ответят, у меня нету. Потому что документации слишком гиганские, а видюшки с ютуба не полные, даже англоязычные.

Вот, благодаря ВАААС, я победил чуды и знать, что такое тип данных auto. На самом деле, меня убило. что существует фигня, которая определяет тип за тебя, с другой стороны, нафига? В любом случае, обрабатывать переменную, по её типу придётся. Я бы даже сказал, благодаря этой фигне. можно будет запутаться, а какой же тип присвоила эта auto. Я так понимаю, тут она присвоила Qstring?


Название: Re: Русский язык в qt. Как локализировать выполнения функций.
Отправлено: demal от Июнь 14, 2020, 15:21
так почитай хотя бы Бланшета. Там гораздо более понятно, чем скакать кузнечиком по Ютубу


Название: Re: Русский язык в qt. Как локализировать выполнения функций.
Отправлено: vbv от Июнь 14, 2020, 16:19
Да...
А какой хороший был вопрос....


По поводу вопроса:
Когда возникает подобная необходимость разбираюсь заново. Потом делаю. И благополучно забываю.
Последнее с чем пришлось разбираться/вспоминать, проверить что все символы строки - находятся в диапазоне до 128.....
Пока символ - байт хорошо но если предположить возможность символов UTF16  уже не так весело.
И, да ничего сложного, понадобится сделать раз в триста лет - сидишь тупишь.

PS: Извините, что на вопрос не ответил...


Название: Re: Русский язык в qt. Как локализировать выполнения функций.
Отправлено: Hero Sanya от Июнь 23, 2020, 20:07
А как быть в случае если используется QFileDialog ?
Код:
QFileDialog fd;
auto rusStr = QStringLiteral(fd.getSaveFileName());
Жалуется на fd, что скобки не закрыл.

По идеи, такая конструкция, вызовет диалоговое окно, в котором пользователь укажет путь сохранения.
Переменная должна его запомнить с русскими словами и дальше её можно пихать в обработки.


Название: Re: Русский язык в qt. Как локализировать выполнения функций.
Отправлено: kambala от Июнь 23, 2020, 22:24
литерал работает только с константами. в данном случае у тебя будет просто QString:
Код
C++ (Qt)
auto rusStr = fd.getSaveFileName();


Название: Re: Русский язык в qt. Как локализировать выполнения функций.
Отправлено: demal от Июнь 23, 2020, 22:27
а зачем такая конструкция, если вот тут https://doc.qt.io/qt-5/qfiledialog.html (https://doc.qt.io/qt-5/qfiledialog.html) говорят что по другому делается. Зачем преобразовывать QString? все ОС поддерживают utf8, зачем такой изврат?


Название: Re: Русский язык в qt. Как локализировать выполнения функций.
Отправлено: Hero Sanya от Июнь 24, 2020, 00:31
а зачем такая конструкция, если вот тут https://doc.qt.io/qt-5/qfiledialog.html (https://doc.qt.io/qt-5/qfiledialog.html) говорят что по другому делается. Зачем преобразовывать QString? все ОС поддерживают utf8, зачем такой изврат?
Чтобы не было вот такого Название.txt.


Название: Re: Русский язык в qt. Как локализировать выполнения функций.
Отправлено: Hero Sanya от Июнь 24, 2020, 13:52
литерал работает только с константами. в данном случае у тебя будет просто QString:
Код
C++ (Qt)
auto rusStr = fd.getSaveFileName();
Таким способом русские буквы опять будут выводиться саша так. Просто дальше, у меня будет выводится путь в лейбле, этим rusStr. И из него будет браться текст в стринговую переменную, чтобы с текстом можно было манипулировать. Текст будет переводится в const char*, чтобы он для _mkdir подошёл из #include <direct.h>, для создания папки. Однако стринговая переменная, которая хранит путь с именем, будет идти дальше по коду, чтобы в файловых потоках, файлы создавались в этой новой папке. Всё ломается, чисто, когда пользователь вводит русские символы или путь до папки имеет русские буквы.


Название: Re: Русский язык в qt. Как локализировать выполнения функций.
Отправлено: kambala от Июнь 24, 2020, 14:11
Цитировать
Текст будет переводится в const char*, чтобы он для _mkdir подошёл из #include <direct.h>, для создания папки. Однако стринговая переменная, которая хранит путь с именем, будет идти дальше по коду, чтобы в файловых потоках, файлы создавались в этой новой папке. Всё ломается, чисто, когда пользователь вводит русские символы или путь до папки имеет русские буквы.
надо сконвертировать QString в нужную кодировку, почитай какую _mkdir ожидает (скорее всего это UTF-16). для конвертации см. методы QString или QTextCodec.


Название: Re: Русский язык в qt. Как локализировать выполнения функций.
Отправлено: demal от Июнь 24, 2020, 19:08
зачем преобразовывать что-то, если у тебя в qt есть тот же функционал. Достаточно посмотреть на qdir, который прекрасно понимает в utf-8. И все эти преобразования оказываются бессмысленными.