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);//得到字体名字
|