我有Windows控制台应用程序,它接受Unicode字符作为参数
wmain( int argc , wchar_t ** argv)
现在,我想将argv参数传递给QApplication。但是QApplication在char **上接受。
我如何设法实现这一目标?
答案 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);