передать аргументы юникода в QApplication - PullRequest
0 голосов
/ 22 ноября 2018

У меня есть консольное приложение Windows, которое принимает символы Юникода в качестве аргумента

 wmain( int argc , wchar_t ** argv)

Теперь я хочу передать аргумент argv моему QApplication.Однако QApplication принимает на символ **.

Как мне добиться этого?

Ответы [ 3 ]

0 голосов
/ 25 ноября 2018

Пока QTBUG-3200 не исправлено, единственный способ не быть ограниченным кодировкой "Текущая локаль для не-Unicode", кажется, преобразовать аргументы в UTF-8, тогда

QTextCodec::setCodecForLocale(QTextCodec::codecForName("utf-8"));
QApplication(argc, argv_converted);

Пока я не могу проверить, будет ли это работать.

0 голосов
/ 25 ноября 2018

Вам не нужно передавать эти аргументы конструктору QApplication.Вы можете передать фиктивный массив, так как он не используется в Windows.Программный аргумент в стиле C, передаваемый через main arguments, не является родным для Windows способом доступа к аргументам, и QApplication не использует его.main на основе wchar - это Kludge, который пытается отвлечь внимание от того факта, что argv не является нативным интерфейсом.

Это работает:

int argcc = 1;
char arg0[1] = "";
char *argvc[2] = {&arg0, nullptr};
QApplication app(argcc, argvc);
0 голосов
/ 22 ноября 2018

Qt не использует wchar_t * для строк Юникода, как обычно.Только QString или char *.Если вы хотите преобразовать QString -> char * (или char * -> QString), используйте QTextCodec .Например, в более старых версиях Windows для консоли используется кодировка cp866, а если вы хотите отправить код Unicode QString в командную строку:

QString string = "Unicode text";
QTextCodec *codec = QTextCodec::codecForName("cp866");
QByteArray encodedString = codec->fromUnicode(string);
//encodedString.data() - char* representation of unicode QString

Для чтения входных параметров в main() выполните преобразование следующим образом:

QTextCodec *codec = QTextCodec::codecForName("cp866");
QString strArg = codec->toUnicode(argv);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...