Russian Qt Forum
Ноябрь 22, 2024, 00:51 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Русский язык в qt. Как локализировать выполнения функций.  (Прочитано 7587 раз)
Hero Sanya
Новичок

Offline Offline

Сообщений: 34



Просмотр профиля
« : Июнь 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);
}
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #1 : Июнь 13, 2020, 10:42 »

сохраняй исходный файл в кодировке UTF-8 и проблем с русскими словами в коде не будет:
Код
C++ (Qt)
auto rusStr = QStringLiteral("привет");
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Hero Sanya
Новичок

Offline Offline

Сообщений: 34



Просмотр профиля
« Ответ #2 : Июнь 13, 2020, 11:58 »

сохраняй исходный файл в кодировке UTF-8 и проблем с русскими словами в коде не будет:
Код
C++ (Qt)
auto rusStr = QStringLiteral("привет");
Так, ну применилась эта штука удачно. Только вот, что такое auto? Это тип данных?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #3 : Июнь 13, 2020, 12:14 »

по-моему тебе уже неоднократно говорили изучать С++ Улыбающийся https://en.cppreference.com/w/cpp/language/auto
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Hero Sanya
Новичок

Offline Offline

Сообщений: 34



Просмотр профиля
« Ответ #4 : Июнь 14, 2020, 14:33 »

по-моему тебе уже неоднократно говорили изучать С++ Улыбающийся https://en.cppreference.com/w/cpp/language/auto
Да, я учу си++ и qt. Но кроме как посмотреть все видюшки с ютуба и тыкаться в документации, иного способа кроме как задавать свои вопросы на форумах и везде в надежде что ответят, у меня нету. Потому что документации слишком гиганские, а видюшки с ютуба не полные, даже англоязычные.

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

Сообщений: 53


Просмотр профиля
« Ответ #5 : Июнь 14, 2020, 15:21 »

так почитай хотя бы Бланшета. Там гораздо более понятно, чем скакать кузнечиком по Ютубу
Записан
vbv
Чайник
*
Offline Offline

Сообщений: 59


Просмотр профиля
« Ответ #6 : Июнь 14, 2020, 16:19 »

Да...
А какой хороший был вопрос....


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

PS: Извините, что на вопрос не ответил...
Записан
Hero Sanya
Новичок

Offline Offline

Сообщений: 34



Просмотр профиля
« Ответ #7 : Июнь 23, 2020, 20:07 »

А как быть в случае если используется QFileDialog ?
Код:
QFileDialog fd;
auto rusStr = QStringLiteral(fd.getSaveFileName());
Жалуется на fd, что скобки не закрыл.

По идеи, такая конструкция, вызовет диалоговое окно, в котором пользователь укажет путь сохранения.
Переменная должна его запомнить с русскими словами и дальше её можно пихать в обработки.
« Последнее редактирование: Июнь 23, 2020, 20:13 от Hero Sanya » Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #8 : Июнь 23, 2020, 22:24 »

литерал работает только с константами. в данном случае у тебя будет просто QString:
Код
C++ (Qt)
auto rusStr = fd.getSaveFileName();
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
demal
Чайник
*
Offline Offline

Сообщений: 53


Просмотр профиля
« Ответ #9 : Июнь 23, 2020, 22:27 »

а зачем такая конструкция, если вот тут https://doc.qt.io/qt-5/qfiledialog.html говорят что по другому делается. Зачем преобразовывать QString? все ОС поддерживают utf8, зачем такой изврат?
Записан
Hero Sanya
Новичок

Offline Offline

Сообщений: 34



Просмотр профиля
« Ответ #10 : Июнь 24, 2020, 00:31 »

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

Offline Offline

Сообщений: 34



Просмотр профиля
« Ответ #11 : Июнь 24, 2020, 13:52 »

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

Сообщений: 4747



Просмотр профиля WWW
« Ответ #12 : Июнь 24, 2020, 14:11 »

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

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
demal
Чайник
*
Offline Offline

Сообщений: 53


Просмотр профиля
« Ответ #13 : Июнь 24, 2020, 19:08 »

зачем преобразовывать что-то, если у тебя в qt есть тот же функционал. Достаточно посмотреть на qdir, который прекрасно понимает в utf-8. И все эти преобразования оказываются бессмысленными.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.115 секунд. Запросов: 23.