Qt中文支持如何实现和优化?
摘要:这篇博客概括了Qt中处理中文的技巧,包括文件编码转换、中文字符排序和基于首字母的中文查找。文章提供了使用QTextCodec、QCollator类和汉字拼音首字母列表的实用指南,适合Qt开发者处理中文相关功能。
摘要:
这篇博客概括了Qt中处理中文的技巧,包括文件编码转换、中文字符排序和基于首字母的中文查找。文章提供了使用QTextCodec、QCollator类和汉字拼音首字母列表的实用指南,适合Qt开发者处理中文相关功能。
关键词:
中文编码、字典排序、首字母查找、QTextCodec、QCollator、汉字拼音首字母列表
本文包含以下内容:
中文编码
按中文字典排序
中文首字母查找
版本:Qt5.14.2
中文编码
在一些老项目中,发现项目中使用的文件是GBK编码,而新项目使用的是Unicode编码,在有一些操作中需要进行切换。使用以下代码:
点击折叠或展开代码
void readFile(const QString &file_path)
{
// 打开文件
QFile file(file_path);
if (!file.open(QFile::ReadOnly | QFile::Text))
{
qDebug() << "file open failed:" << file_path << file.errorString();
return ;
}
// 设置读取文件编码为utf-8
QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
// 读取文件
// or do something
// 如果发送信号,那么槽函数也会使用当前的编码
emit sig();
// 关闭文件
file.close();
// 设置回原来的编码或者系统编码
QTextCodec::setCodecForLocale(QTextCodec::codecForName("System"));
}
按中文字典排序
将一些数据按中文字典排序输出
点击折叠或展开代码
// 学生类
class Student
{
public:
int id; // 学号
QString name; // 姓名
};
QList<Student *> list;
// 排序函数
std::sort(list.begin(), list.end(), [=](Student *s1, Student *s2){
static QCollator collator; // 使用静态变量加快速度
collator.setLocale(QLocale(QLocale::Chinese, QLocale::China));
collator.setNumericMode(true);
collator.setCaseSensitivity(Qt::CaseInsensitive);
// 修改大于小于实现正序或倒序
return collator.compare(s1->name, s2->name) <= 0 ;
});
中文首字母查找
在输入框中通过输入中文首字母进行快速查找。找了一些方案,如https://blog.csdn.net/qq_36651243/article/details/92651963,但是效果并不理想。最后找到这么一篇通过拼音列表实现的https://blog.csdn.net/cibiren2011/article/details/47860493,虽然在多音字的转换上有所缺陷,但是准确率大大提高,已经足够使用了。
