【问题标题】:QFont doens't allow line spacing or leading to be set manuallyQFont 不允许手动设置行距或行距
【发布时间】:2015-04-28 11:02:19
【问题描述】:

我一直在尝试找到一种方法来更改字体文件的行间距默认值,使用QFontQFontMetrics 或类似的东西。我正在使用QPainter::drawText 在边界矩形中绘制一些文本。

奇怪的是QFont 允许更改字距,甚至有一些拉伸操作和字母间距,但没有改变行之间的默认间距。我已经搜索并找到了一些使用 QTextLayout 的部分解决方案,但似乎没有一个可以正常工作。

我需要使用QPainter,因为我使用要使用 OpenGL 渲染的文本生成纹理。

寻找更多想法让我尝试!

更新

我发现我可以使用QPainter 来绘制允许HTML 文本格式的QStaticText,类似于QTextDocument。然而,CSS 样式不像QTextDocument 那样工作(有一个bug report)......因此仍然没有领先,但我希望这能让我走上正轨。

已解决

正如 Mykhaylo 建议的那样,我使用 QTextDocument 得到了我想要的东西。 Link to solution

【问题讨论】:

    标签: c++ qt fonts spacing fontmetrics


    【解决方案1】:

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

    使用QTextDocument。即使使用QPainter,您也可以使用它打印多行和富文本。解决方法见use QPainter with QTextDocument

    【讨论】:

    • 它按预期工作。真棒Mykhaylo :)。感谢您的帮助!
    【解决方案2】:

    看来这里可以做的不多。

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

    它是字体高度和行距的总和。您可以调整高度 - 在 QFont 构造函数中设置它。但是你不能设置领先。

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

    【讨论】:

    • 感谢您的快速遮阳篷@demonplus。我会检查 QFont 文档,看看你的建议是否能解决我的问题。我会发回结果:)
    • 我找不到任何采用高度参数的 QFont 构造函数...添加新行字符会弄乱自动换行,所以这对我来说也不是解决方案。但是再次感谢您的时间@demonplus ;)
    • QFont::QFont(const QString & family, int pointSize = -1, int weight = -1, bool italic = false) - 当你改变pointSize时,字体的高度也会改变
    • 我对你所说的身高感到困惑^^。行距将随高度而变化,但前导将保持不变:)。所以仍然没有解决方案。
    • 是的,对不起。我试图在我的回答中描述它。 Qt 允许改变字体的高度,但你不能改变行距。
    猜你喜欢
    • 2011-04-20
    • 2011-04-22
    • 2013-07-20
    • 1970-01-01
    • 1970-01-01
    • 2017-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多