QFont不允许手动设置行间距或前导空白。

7
我一直在尝试使用QFont、QFontMetrics或类似的工具来改变字体文件的行间距默认值。我正在使用QPainter::drawText在一个矩形框内绘制一些文本。
奇怪的是,QFont允许更改字体字距甚至具有一些拉伸操作和字母间距,但没有任何方法可以更改默认行间距。我已经搜索并找到了一些使用QTextLayout的部分解决方案,但似乎都不能正常工作。
我需要使用QPainter,因为我要用OpenGL生成带有文本的纹理。
寻找更多可尝试的想法!
更新
我发现可以使用 QPainter 绘制 QStaticText,这允许使用 HTML 文本格式,类似于 QTextDocument。然而,CSS 样式不像在 QTextDocument 中那样工作(有一个错误报告)... 因此仍然没有行间距,但我希望这能让我走上正确的道路。 已解决 我使用 Mykhaylo 建议的 QTextDocument 得到了我想要的结果。解决方案链接
2个回答

3

QFontMetrics并不是专门为多行文本设计的。

请使用QTextDocument。您可以使用它打印多行和富文本,甚至使用QPainter。请参阅如何在QTextDocument中使用QPainter的解决方案。


它按照预期运行,真的很棒Mykhaylo : )。感谢你的帮助! - Pedro Leal

0

看起来这里并没有太多可以做的。

QFontMetrics::lineSpacing会返回你需要的内容,但是它是只读的。

它是字体高度和行间距之和。你可以调整高度 - 在QFont构造函数中设置。但是你无法设置行间距。

有些人在字符串末尾添加\n以增加行之间的空间,但这当然不总是一个好的解决方案。


感谢@demonplus的快速回答。我会查看QFont文档,看看你建议的是否解决了我的问题。我会回复结果 :) - Pedro Leal
我找不到任何带有高度参数的QFont构造函数...添加换行符会破坏单词换行,所以这对我也不是一个解决方案。但还是非常感谢您的时间,@demonplus ;) - Pedro Leal
QFont::QFont(const QString & family, int pointSize = -1, int weight = -1, bool italic = false) - 当您更改pointSize时,字体的高度也会随之改变。 - demonplus
我对你所说的“height”感到困惑^^。行距会随着高度而改变,但导读线将保持不变:)。所以还没有解决方案。 - Pedro Leal
是的,抱歉。我在我的答案中试图描述它。Qt允许更改字体的高度,但无法更改行距。 - demonplus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接