QApplication в Unicode

Конструктор QApplication принимает (int argc, char**argv) для обработки любых специфичных для Qt аргументов командной строки.

Что делать, если мое приложение в Unicode? А у меня есть wchar_t** argv?

Кажется немного глупым создавать char * копию всех аргументов командной строки для передачи в библиотеку, которая сама является юникодом.

3 ответа

Решение

Да, это было бы. Если бы не эта заметка:

Предупреждение: в Unix этот список составлен из параметров argc и argv, переданных конструктору в функцию main(). Строковые данные в argv интерпретируются с использованием QString::fromLocal8Bit(); следовательно, невозможно передать, например, японские аргументы командной строки в системе, работающей в локали Latin1. Большинство современных систем Unix не имеют этого ограничения, так как они основаны на Unicode.

В Windows на основе NT это ограничение также не распространяется. В Windows arguments() не создается из содержимого argv/argc, так как содержимое не поддерживает Unicode. Вместо этого arguments() создается из возвращаемого значения GetCommandLine(). В результате этого строка, заданная arguments(). At(0), может не быть именем программы в Windows, в зависимости от того, как было запущено приложение.

Правда, я тоже не понимаю ни слова.

Что ж, main всегда получит char** argvтак вот что QApplication надеется. Вы также можете преобразовать их (используя какую локаль / кодировку?) В широкие строки, если вы хотите делать другие вещи с аргументами команды.

Просто свяжите библиотеку qtmain.

qtmain — это вспомогательная библиотека, которая позволяет разработчику написать кроссплатформенную функцию main() в Windows. Если вы не используете qmake, qbs или другие инструменты сборки, такие как CMake, вам необходимо связать библиотеку qtmain.

https://doc.qt.io/qt-5/qtmain.html

Другие вопросы по тегам