将含中文字符串输给Qt控件
字符串不是用变量传递
- 比如直接设置label显示内容,不经过变量赋值,这种情况可以使用下面两张方式
- 如果是一个变量中有中文,在变量中显示正常,显示在Qt控件中乱码,就要参考下面一节
方法1:在cpp文件中添加
//#ifdef Q_OS_WIN
//#pragma execution_character_set("utf-8") //解决 VS编译器下中文乱码
//#endif
方法2:QStringLiteral
ui.label_info->setText(QStringLiteral("哈哈哈"));
字符串变量
- 前面两种方法不支持字符串变量,如果是将一个含中文的变量显示在label上,前面方法还是会乱码
- 来源: C++ Qt QString转string乱码的处理方法
string s1 = file.lpstrFile; //file.lpstrFile=D:\\AA来\\中.md
QString s2 = QString::fromLocal8Bit(s1.data());
ui.lineEdit->setText(s2);
从Qt控件中取字符串
QString md_path = ui.lineEdit->text();
QTextCodec *codec = QTextCodec::codecForName("GBK");
string md_path_s = codec->fromUnicode(md_path).data();