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.