分享

Qt中文处理相关

 ylsnData 2017-12-29

1,字体相关 字体测量  分理出QString中的字体
2,文本的查找方法
3,根据汉字的编码得到汉字
4,汉字编码之间的转换
5,设置程序中的编码,解决乱码问题
6,Qt中添加外部字体的方法
一:字体相关
(1)字体的测量

QFont font;  //初始化为某种字体
QFontMetrics fm(font);   //字体的测量
textWidth=fm.width(textString);  //得到字体的宽度
textHeight=fm.height();  //得到字体的高度
font.setPixelSize(value); //设置字体的大小
font.setLetterSpacing(QFont::AbsoluteSpacing,textInterval);//设置字体的间距
(2)分离出QString中的汉字
https://blog.csdn.net/zxl_1996/article/details/79303850

//提取字符串中的中文字符串
QString myFile::getChinese(QString &str)
{
    //    QString str;
    QString chineseStr;
    int nCount = str.count();
    for(int i = 0 ; i < nCount ; i++)
    {
        QChar cha = str.at(i);
        ushort uni = cha.unicode();
        if(uni >= 0x4E00 && uni <= 0x9FA5)
        {
            //这个字符是中文
            qDebug()<<uni;
            chineseStr.append(uni);
            //            qDebug("%s",uni);
        }
    }
    return chineseStr;  //最后返回的这个字符串就是中文字符串
 
}

二:文本的查找

1,文本查找函数,每查找一次,需要将光标的位置,移动到最开始的位置,文件的查找是从文件头开始查找的(默认的)。

QTextEdit,QPlainText。移动到文件头的函数为:moveCusor(QTextCusor::Start);

三:根据汉字的编码,得到汉字(需要输入汉字或其他时,只要输入任何一个汉字或符号的编码,都可以找到对应的汉字)
中文汉字的GB2312编码是根据区码和位码唯一定位一个汉字的:例如“啊”的区码是b0,位码是a1。因此通过b0a1可以定位汉字"啊"。
前提条件:在main.cpp文件中添加中文的支持
    QTextCodec::setCodecForTr(QTextCodec::codecForName("GBk"));
    QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBk"));
    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GBk"));
方法一:

  char temp[2]={0xb0,0xa1};   //0xb0,0xa1是汉字“啊”的GB2312编码   QString s=QString::fromLocal8Bit(temp,2);  //得到GB2312编码对应的汉字   ui->lineEdit->setText(s);  //输出内容为“啊”

注:前提条件是必不可少的
方法二:
或者是int GBCoding[2]={176,161}; //176是b0的十六进制数据,161是a1的十六进制
QString hz=QString::fromLocal8Bit(b,2); //得到的汉字就是hz="啊";

四:汉字编码之间的转换
(1)得到汉字的UTF-8编码:
https://blog.csdn.net/milujun/article/details/23556211
(2)UTF-8编码和GBK编码之间的转换
https://blog.csdn.net/hejinjing_tom_com/article/details/77780565
例子:
QString str="中";
QTextCodec *utf8 = QTextCodec::codecForName("UTF-8");
QTextCodec* gbk = QTextCodec::codecForName("gbk");
QString Unicode= utf8->toUnicode(str.toLocal8Bit().data()); 
QByteArray gb_bytes= gbk->fromUnicode(strUnicode);
char *ch=gb_bytes.data(); //此处得到的就是中的gbk编码了
(3)C++中 Unicode 与 UTF-8 编码互转
https://blog.csdn.net/GoForwardToStep/article/details/53207804


(3)得到一个字符的unicode编码的方法:
QTextCodec *utf8 = QTextCodec::codecForName("UTF-8");
QString strUnicode= utf8->toUnicode(dotTextItemProp.text.mid(l,1).toUtf8().data());   
QString unicode10="0"; //unicode的编码存储
for(int i=0;i<strUnicode.length();i++)
    {
      unicode10=QString::number(strUnicode[i].unicode(),10);
    }
unicode10就是最终得到的unicode编码的值(注:程序编写的编码是UTF-8的编码方式)

五:设置程序中的编码(解决乱码问题)
关于文件的编码统一选择UTF-8编码
1,Qt5中的方法:    QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
2,Qt4中的方法:    //中文支持
    QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
    QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));

六:Qt中添加外部字体的方法
参考:https://blog.csdn.net/zzti_erlie/article/details/56666634
1,添加字体的方法:fontID=QFontDatabase::addApplicationFont(fileName);//其中fileName是文件的完整路径,fontID是添加的外部字体的序号,该序号从0开始
QString f=QFontDatabase::applicationFontFamilies(fontID).at(0);//得到字体名字
QFont font(f); //得到字体
2,在linux中安装字体的方法:https://jingyan.baidu.com/article/0eb457e5d4a48703f0a90565.html

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多