首发于我的个人博客:xie-kang.com

博客内有更多文章,欢迎大家访问

原文地址

在使用QT 5.15.2 开发的过程中碰到了件怪事,下列代码无法给QTextEdit选中的文字设置字体:

QTextCursor cursor = m_textEdit->textCursor();
QTextCharFormat tempCharFmt;
tempCharFmt.setFontFamily("微软雅黑");
cursor.mergeCharFormat(tempCharFmt);

这代码在我们客户端(基于Qt 5.10.x)工作很久了,为啥现在会失效呢。

排查了一遍,发现在mergeCharFormat后,两个Qt版本的m_textEdit->toHtml()返回的值不一样。

5.10.x 返回的html中,font-family的值只有一个:

<HTML>
...font-family:'微软雅黑';...
</HTML>

5.15.2 返回的html中,font-family的值却有两个:

<HTML>
...font-family:'微软雅黑','其它字体';...
</HTML>

有点奇怪,我使用Qt示例的富文本编辑器也测试了一遍,这回两个Qt版本QTextEdit返回的html却又一样了。

继续排查,发现QTextCharFormat::fontFamilys()的返回值,Qt 5.10.x返回空,而Qt.15.2一直有值。

可以肯定Qt 5.15.x QTextEdit的底层代码有所调整,但我也未在工程中排查到哪里设置QTextEdit的什么属性导致的(或者单纯某处代码使用Qt sdk不规范)。

我这里简单粗暴处理一下:

QTextCursor cursor = m_textEdit->textCursor();
QTextCharFormat tempCharFmt;
tempCharFmt.setFontFamily("微软雅黑");
#if (QT_VERSION >= QT_VERSION_CHECK(5, 15, 0))
QStringList fontList;
tempCharFmt.setFontFamilies(fontList);
#endif
cursor.mergeCharFormat(tempCharFmt);

黑盒测试一遍,通过。

就先这样。

Qt 5.15.2 QTextEdit无法设置新字体的处理方式的更多相关文章

  1. qt中qlineedit和qtextedit右键菜单翻译成中文

    没有linguist和lupdate等命令需要安装Linguist: 在Terminal中输入: sudo apt-get install qt4-dev-tools qt4-doc qt4-qtco ...

  2. Qt 5中信号和槽的新语法

    QT 是一个跨平台的 C++ GUI 应用构架,它提供了丰富的窗口部件集,具有面向对象.易于扩展.真正的组件编程等特点,更为引人注目的是目前 Linux 上最为流行的 KDE 桌面环境就是建立在 QT ...

  3. 设置新时间校正服务器NTP SERVER

    时间校正服务器IP : 10.*.*.* 适用系统:windows server 2008/windows 7 net stop w32time net start w32time w32tm /qu ...

  4. 1 npoi 网上 不用模板 设置密码 workbook.WriteProtectWorkbook("password", "admin"); 、、 2 locked.IsLocked = true; sheet1.ProtectSheet("password");NPOI操作EXCEL--设置密码才可以修改单元格内容 3 模板设置密码 确定原密码 设置新密码

    1 workbook.WriteProtectWorkbook("password", "admin"); 还是可以进去 只读进去 可以编辑 编辑就另存为   ...

  5. git 查看当前仓库地址以及设置新的仓库地址

    1.查看当前仓库地址 git remote show origin 2.设置新的仓库地址 1.先登录 gitlab 查看当前仓库地址: 执行修改地址命令 git remote set-url orig ...

  6. Qt修改图片的背景色及设置背景色为透明的方法

    先上干货. Qt下修改图片背景色的方法: 方法一: QPixmap CKnitWidget::ChangeImageColor(QPixmap sourcePixmap, QColor origCol ...

  7. 【Android】 TextView设置个别字体样式

    SpannableString msp = new SpannableString("测试"+XM+"更换当前号码将从手机发送一条普通短信进行验证"); msp ...

  8. OneNote无法同时设置中英文字体设置解决办法

    如果你是一位OneNote老用户,无论是2003.2007还是2010或者最新的2013版本,都一直存在一个Bug,就是无法同时设置中英文字体(比如在Word中就可以分别设置不同的).我搜了一下,在微 ...

  9. Android TextView设置个别字体样式

    TextView进一步深化:       Textview 能够对其文字进行格式化.       通过查询资料,了解到格式化文字的方式主要分为两大类:  第一类:HTML标签格式化文字      代码 ...

  10. javascript一种新的对象创建方式-Object.create()

    1.Object.create() 是什么? Object.create(proto [, propertiesObject ]) 是E5中提出的一种新的对象创建方式,第一个参数是要继承的原型,如果不 ...

随机推荐

  1. jquery 事件方法大全

    <!DOCTYPE html><html> <head> <meta charset="utf-8"> <style type ...

  2. pymongo解决查询的时区相差8小时

    背景 最近需要到mongoDB中查询数据,但是发现返回的日期总是和实际时间差8小时.到数据库查询了一下看到时间的确是准确的,只是查询出来的比实际的少了8小时. 通过网上查找资料了解到默认时区是UTC, ...

  3. element-ui的自定义表头

    自定义表头 需求:之前在做一个项目的时候,原型图要求表头文字需要额外解释就会在文字后面标注 1,2作为上标 html中提供了<sup></sup>和<sub>< ...

  4. mongoDB日常操作01

    //serialno_info.i,查看历史最大值db.serialno_info.find({'_id':'define_picture'})//查看文件记录有序id条数db.fs.files.fi ...

  5. Linux基础第八章:操作系统引导过程、运行级别及开机问题处理

    一.操作系统引导过程 1.开机自检(bios) 2.MBR引导 3.grub菜单 4.加载内核(kernel) 5.init进程初始化 二.操作系统运行级别(init0-init6) 1.init 0 ...

  6. Cadvisor+prometheus+grafana

    部署Cadvisor [root@localhost ~]# docker run -d \ --volume=/:/rootfs:ro \ --volume=/var/run:/var/run:ro ...

  7. Mysql修改字段类型修改

    Mysql修改字段类型与长度修改等 alter table news modify column title varchar(130); alter table 表名 modify column 字段 ...

  8. vs2015当前不会命中断点,还没有为该文档

    经百度,需在项目>项目属性>生成>优化代码的勾去掉>保存>再次F11调试可解决

  9. 使用Wireshark完成实验2-TCP

    1.打开Google Chorme,进入https://gaia.cs.umass.edu/wireshark-labs/alice.txt 2.将文本保存,进入https://gaia.cs.uma ...

  10. CSS选择符及盒模型

    一.选择符 1.类型选择符(标签选择符) 特点:能选中当前结构里面(全部同名)标签. 应用:统一某一标签样式时或清除某一标签默认样式时. 2.id选择符 特点:(唯一性!)在同一个页面里面,一个id名 ...