Qt学习: 如何显示中文,QString和string以及C风格字符串的转换
2017-12-03 22:01
2386 查看
由于Qt是使用C++作为语言来开发的,而大多数人对于C++中的STL用的比较多,这也造成了Qt中字符串类型转换问题的一个原因,当然Qt中也封装了一个QString类来方便字符串的使用,所以Qt中大部分类方法的参数都是QString类型的,所以在QString,string,char*三者之间的转换出了些问题.
1.QString和string之前的转换.
2.QString和C风格字符串的转换.
3.string和const char*之前的转化在学C++的时候应该有过印象.
关于Qt中文显示问题.
当然在VS中,左上角文件,高级保存选项里可以设置当前的编码格式.
1.QString和string之前的转换.
QString temp = "nihao"; //QString类中为我们封装了toStdString()方法. string str = temp.toStdString(); ------------------------------------------- string str= "nihao"; //QString类中也封装了静态fromStdString()方法来进行转换. QString temp = QString::fromStdString(str);
2.QString和C风格字符串的转换.
QString text = "asd"; //因为QString保存的是unicode编码格式,所以先转化为本地编码放进QByteArray字节数组中.关于中文问题在后面会提. QByteArray bytes = text.toLocal8Bit(); //然后从字节数组中取出. const char* gbk = bytes.data(); 当然还有一种更简单的方法: Qt为我们准备了一个宏:qPrintable(QString). 可以直接把QString转化为const char*. 至于const char* 转化为QString,直接套用QString的构造函数就可以了啊.
3.string和const char*之前的转化在学C++的时候应该有过印象.
//C风格字符串时可以直接赋值给string的. const char* q = "nihao"; string str = q; //string调用自身的c_str()方法实现转换. string str = "asd"; const char* q = str.c_str();
关于Qt中文显示问题.
//大家都知道,直接给QString赋中文,是显示乱码的,因为在windows,cpp文件中,使用的是GBK编码,汉字占2个字节,其他字符占1个字节.而在linux,cpp文件中,使用的是UTF-8编码... //前面也讲过,QString这个字符串类它是存储了unicode编码,你们可以把QString看成一个存放uinicode字符的数组或容器.由于编码方式不同,所以是显示乱码的. QString text = "你好"; //但在Qt项目中,一般是cpp文件中,以下两种方式,显示出来是正常的,因为都是GBK方式编码的. string str = "你好"; const char* q = "你好";
所以有些小伙伴就会这么使用:但会发现显示出来还是乱码的.原因就是编码方式不同造成的.所以只要把QString往unicode转化即可. string str = "你好"; QString temp = QString::fromStdString(str);
//把GBK编码的你好转换为unicode编码的你好.这样显示就不会乱码了.Local8Bit表示的是本地编码.使用windows的一般是GBK编码. QString str = QString::fromLocal8Bit("你好"); //当然还有一种情况:比如说你写了个notepad,或者其他什么图片游览器,当你把图片或者文件拖拽进去的时候,这个时候接收到的其他是QList<QUrl>,这不是主要的,然后把QList容器中的元素通过成员方法toLocalFile()转化为文件路径,这个路径是QString类型的,这时候如果有朋友在Qt中使用C语言的读取文件方式的话, QList<QUrl> s = event->mimeData()->urls(); QString path = s[0].toLocalFile(); FILE *file = fopen(qPrintable(path),"rb"); char buff[1024]; while (!feof(file)) { const char* q = fgets(buff,1024,file); //这里一定要这样处理才行,否则内容会无法显示中文. QString temp = QString::fromLocal8Bit(q); ui.textEdit->append(temp); }
当然在VS中,左上角文件,高级保存选项里可以设置当前的编码格式.
相关文章推荐
- QString转换为const char*(QFileDialog得到的QString文件路径(含中文)转换为fstream可用的const char*文件路径)以及解决Qt中文字符串乱码的一种思路
- Qt学习之QString与string的相互转换
- 图片文件,图片文件流和BASE64加密字符串之间的转换,以及图片的BASE64加密字符串再jsp上如何显示
- QT中如何将图片作为按键背景色以及中文显示
- Qt中QString和string互相转换的中文乱码问题
- [qt]qstring和string中文支持转换问题
- 图片文件,图片文件流和BASE64加密字符串之间的转换,以及图片的BASE64加密字符串再jsp上如何显示
- python2学习之如何将Unicode中文字符串显示出来
- Python如何将Unicode中文字符串转换成 string字符串
- 【Qt】QString,std::string,char中文字符互相转换
- QT处理中文路径名时把QString转换成std::string
- 解决QT中文字符串在osg中显示乱码的问题
- 如何将json格式的string字符串转换为string数组
- QT如何支持中文显示
- QT中如何显示中文
- 在 Qt 中如何获得一个字符串(QString)在某种字体(QFont)下输出后占据的矩形大小?
- STL string 的各种功能剖析 以及char字符串与string串的互相转换
- 如何从 basic_string 转换为其他字符串类型
- C风格字符串转换到宽字节,中文宽字节输出的源代码
- A Boolean wrapped with string (如何将布尔变量转换为字符串变量--写给java初学者)