Qt5对付中文真好用

Qt好多C++程序员都在用,Qt4大家可能用的多,到了Qt5不熟悉的人到是很多,其中我喜欢的特性也是和Qt4大不一样的地方就是对中文的处理。

Qt4中使用“QTextCodec::setCodecForTr(QTextCodec::codecForName("gb18030"));”类似的语句来解决问题,但是这种全局性的设置在一些情况是下是会影响其他语言的。例如软件中存在多种语言。

Qt5中是怎么解决中文的呢?我的理解就是QString一个类直接全部搞定。

例如想保存中文到文件中,再将文件中的中文内容读取到程序中。

一下是代码片段:

 1 bool MainWindow::__ReadFile(const QString &filename)
 2 {
 3     QFile infile(filename);
 4     if (infile.open(QIODevice::ReadOnly))
 5     {
 6         //textEdit->setPlainText(QString::fromLocal8Bit(infile.readAll()));
 7         textEdit->setPlainText(QString::fromUtf8(infile.readAll()));
 8         infile.close();
 9
10         setWindowModified(false);
11         setWindowTitle(filename);
12         return true;
13     }
14     return false;
15 }
 1 bool MainWindow::__WriteFile(const QString &filename)
 2 {
 3     QFile outfile(filename);
 4     if (outfile.open(QIODevice::WriteOnly))
 5     {
 6         //outfile.write(textEdit->toPlainText().toLocal8Bit().data());
 7         outfile.write(textEdit->toPlainText().toUtf8().data());
 8         outfile.close();
 9
10         setWindowModified(false);
11         setWindowTitle(filename);
12         return true;
13     }
14     return false;
15 }
QString::fromUtf8

QString::toUtf8

或者
QString::fromLocal8Bit
QString::toLocal8Bit

使用“一对”就可以完美解决中文输入输出问题。

大家可以试试。

实验源码:点击这里
 

Qt5对付中文真好用,布布扣,bubuko.com

时间: 2024-10-31 13:35:33

Qt5对付中文真好用的相关文章

QT5的中文路径和目录问题小记

/// 如果用C函数打开文件 即使用非QT5库的字符串 /// toLocal8Bit或者toUtf16来转换窄字符和宽字符 /// QT5内部都是utf8处理所有通过QT5获取的中文目录本身就是UTF-8格式 /// QT系统可以识别 但非QT库函数不能识别 /// 以上,QT5所遵循的原则就是,进入QT5的字符串,无论是哪种编码方式, /// 都得转成UTF-8(QT5默认),从QT5出来的字符串,需要根据情况来处理 Qstring filename; const char *file_ =

QT5关于中文乱码,以及出现C2001错误解决方法

以前用各种方法都试了,都不行,今天发现用QStringLiteral这个宏把字符串扩起来,如QStringLiteral("中文"), QTreeWidgetItem *root_1 = new QTreeWidgetItem(tree, QStringList(QStringLiteral("主件"))); 前提是utf-8编码,但是注意,qt默认的utf-8不带bom的,如果用QStringLieral发现编译不能通过,那么就是你的utf-8编码问题.QT5设置

VS2013+QT5.3 中文乱码问题 解决方案

网上很多关于QT中文乱码的问题及答案,但情况不同解决方法也不一样. 本方案适用于VS2013+QT5.3环境(编译器是VC) using namespace std; # pragma execution_character_set("utf-8") //文件的开头要声明字符编码UTF-8,这样输出中文字符串就能显示正常.qDebug() << " 连接交易前置...成功" ; 直接输出字符串是没问题了,但遇到char*[]这样的字符数组的时候显示中文还

在Qt5使用中文(vs环境)

如果是使用mingw版本的Qt create, 也就是使用GCC编译器应该没那么多事吧. 不过我还是用惯了VS呢. 好了,废话不多说,开始总结vs下乱码的解决方案. vs2003 把源码存成 utf-8格式编码就可以直接中文了. vs2005/08/10/13 1 QString s1 = QStringLiteral("我是中文"); 2 QString s2 = QString::fromLocal8Bit("我是中文"); char *UnicodeToUTF

qt creator在Qt5中中文显示的问题

当我们用Qt Creater时,经常出会出现如下问题: 处理方法如下:用记事本打开你的源代码,然后点另存为,utf-8,编码覆盖,这时中文就没问题了但是会乱码.在字符串前加个宏QStringLiteral把字符串扩起来:这样字符串就不会乱码了.这个问题是qt creator的问题,用vs2010就不会.

5、QT 中文乱码

在 Qt 代码的 const char* 这种窄字符串中使用中文就会发现显示的全是乱码. 在 Qt5 之前, 大多数人通过下面这三句代码来解决: QTextCodec::setCodecForTr(...) QTextCodec::setCodecForCStrings(...) QTextCodec::setCodecForLocale(...)   然后这三句代码是有安全隐患的, 下面的文章都有说明: QString 与中文问题 Qt中translate.tr关系 与中文问题 Qt国际化(源

C++ vs.net设置UTF8字符

1.将main.cpp改成utf-8编码,方法是点击main.cpp,然后选择菜单文件->高级保存选项.[所有源码都要转换成uft-8] 2.在你的main函数里,设置如下代码,完美解决qt5的中文乱码 MSC_VER是MSVC编译器的内置宏,定义了编译器的版本.下面是一些编译器版本的_MSC_VER值 MS VC++ 10.0 _MSC_VER = 1600  [VC2010] MS VC++ 9.0 _MSC_VER = 1500   [VC2008] MS VC++ 8.0 _MSC_VE

QT5中文乱码

QTextCodec * BianMa = QTextCodec::codecForName ( "GBK" );QMessageBox::information(this, "提示", BianMa->toUnicode("中文显示!")); 其实也可以通过QString定义的静态函数,先转换成Unicode类型: QString::fromLocal8Bit("提示") 不过在Qt5中,提供了一个专门的处理宏,来支持

ubuntu系统下QT5.5编写程序时不能输入中文

解决方法: 1.安装fcitx-frontend-qt5 [email protected]:/home/he# sudo apt-get install fcitx-frontend-qt5 2.将安装后的fcitx-frontend-qt5复制到qt安装目录 通常,fcitx-frontend-qt5在下面的目录路径中(可用命令dpkg -L 包名看文件安装路径): /usr/lib/x86_64-linux-gnu/qt5/plugins/platforminputcontexts/lib