将unicode参数传递给QApplication

时间:2018-11-22 13:49:19

标签: c++ qt unicode

我有Windows控制台应用程序,它接受Unicode字符作为参数

 wmain( int argc , wchar_t ** argv)

现在,我想将argv参数传递给QApplication。但是QApplication在char **上接受。

我如何设法实现这一目标?

3 个答案:

答案 0 :(得分:1)

QTBUG-3200被修复之前,不受“非Unicode当前语言环境”字符集限制的唯一方法似乎是将参数转换为UTF-8,然后

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

我目前无法验证它是否可以工作。

答案 1 :(得分:1)

您无需将这些参数传递给QApplication构造函数。您可以传递一个虚拟数组,因为该数组未在Windows中使用。通过main参数传递的C风格程序参数不是Windows原生的访问参数的方式,并且QApplication不使用它。基于wchar的{​​{1}}是一种试图分散注意力的事实,即main不是本机接口。

这有效:

argv

答案 2 :(得分:-1)

Qt照常不将wchar_t *用于Unicode字符串。仅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);