首发于我的个人博客: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);
黑盒测试一遍,通过。
就先这样。