首发于我的个人博客: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);

黑盒测试一遍,通过。
就先这样。

原文地址:http://www.cnblogs.com/xie-kang/p/16814891.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性