【问题标题】:How to set the line spacing for Qml Text Item?如何设置 Qml 文本项的行距?
【发布时间】:2018-11-18 21:36:19
【问题描述】:

我想不出来这个。我的意思是 Qml 文本项中文本行之间的垂直间距。我不能使用富文本,而且 GridLayout 似乎破坏了我的换行、水平对齐和检查截断的能力。这是在一个矩形内。

Text{   
        width:10
        wrapMode: Text.Text.Wrap
        text:"This will be broken into multiple lines. How could I set the vertical spacing between them?"
     }

我的意思是:

对比

【问题讨论】:

  • 我很乐意,但举个例子... GridLayout 破坏了东西?但除此之外,有没有办法在没有它的情况下定义行/段落间距?
  • 是我想看看产生问题的代码,因为我认为它取决于它的实现,所以对于类型的问题:我的代码不起作用 OP 必须提供一个minimal reproducible example,你能分享一个minimal reproducible example吗?
  • 我明白,但这更像是一个笼统的问题。我将发布一些代码以使其更清晰。我可以提供一个 GridLayout 破坏事物的示例,但我需要做一些工作来修剪我现有的代码等。
  • 所以我的意思是我可以在这里使用的通用属性。我猜 LineHeight 定义了线条的高度,而不是它们之间的空间,并且似乎打破了我的布局。我在文档中找不到任何此类属性。

标签: qt widget qml kde-plasma plasmoid


【解决方案1】:

check the documentation 是一个好习惯。浏览它,您可以看到一个名为lineHeight 的属性。我相信这就是你要找的。来自文档:

lineHeight : real

设置文本的行高。该值可以是像素或乘数,具体取决于lineHeightMode

他们还告诉你如何使用它

默认值为 1.0 的乘数。行高必须为正值。

使用lineHeight 作为乘数,您可以在 MSWord 中模拟以下行间距枚举。

Single
1.5 lines
Double
Multiple

这是一个例子:

import QtQuick 2.0
import QtQuick.Window 2.0

Window {
    visible: true
    width: 200
    height: 300
    
    Text {
        id: text
        width: 175
        anchors.centerIn: parent
        
        //  text: "HELLO HELLO HELLO HELLO HELLO HELLO HELLO HELLO HELLO HELLO HELLO HELLO HELLO HELLO"
        text: "Cat ipsum dolor sit amet, sleep nap. You call this cat food. Push your water glass on the floor."
        
        font.family: "Monaco"    // Monaco ❤️
        wrapMode: Text.WordWrap  // Make the text multi-line
        horizontalAlignment: Text.AlignHCenter

        //  lineHeight: 1.0  // single-spacing (default)
        lineHeight: 1.5  // 1.5 line-spacing
        //  lineHeight: 2.0  // double-spacing
        //  lineHeight: 3.0  // triple-spacing
        
    }
}

以下是使用lineHeight 的不同值的结果(在典型的 MacOS 上)

单行距

1.5x、双倍 (2x)、三倍 (3x)


但是,如果您想模仿其他行距枚举:

At least
Exactly

您需要修改像素高度。您可以通过将lineHeightMode 设置为Text.FixedHeight 来做到这一点。像这样

Window {
    visible: true
    width: 200
    height: 300
    
    Text {
        id: text
        width: 175
        anchors.centerIn: parent
        
        text: "Cat ipsum dolor sit amet, sleep nap. You call this cat food. Push your water glass on the floor."
        
        font.family: "Monaco"    // Monaco ❤️
        wrapMode: Text.WordWrap  // Make the text multi-line
        
        
        lineHeightMode: Text.FixedHeight
        lineHeight: 6            // exaggerated, text will be scrunched up
        
    }
}

正好 6 个

【讨论】:

  • 感谢您的详细解答!正如我在评论中所说:“所以我的意思是我可以在这里使用的通用属性。我想 LineHeight 定义了线条的高度,而不是它们之间的空间,并且似乎破坏了我的布局。”这可能就是锚的破损程度。属性是,但没关系。
  • 天哪,我一定是瞎了眼。 ? 好吧,我想你可以通过使用lineHeight 以某种方式操纵行之间的空间。
  • 实际上,我在这里问我的问题之前尝试将其设置为 2x,效果是我的标签完全脱离了我的矩形,所以我假设该属性完全做了其他事情。我想这与我的锚设置有关,因为我后来发现将锚与基于我的小部件中的根项目大小的动态字体调整大小相结合也改变了相对于背景矩形的标签位置。无论如何...很高兴知道这通常有效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-23
  • 1970-01-01
  • 2011-12-20
  • 2016-02-28
  • 2023-04-08
相关资源
最近更新 更多