2017-07-31 44 views
0

所以我有一个内部带有标签文本的矩形。如果文本太长而无法放入一行,我想增加矩形的大小,否则应该保持不变。根据是否包装文字来调整矩形大小QML

到目前为止,我尝试使用lineCount,剪辑,截断特性从 qt的docs -

的文本不适合,我也得到椭圆。但是,剪辑和截断总是返回false。线数只是返回当前的线数,忽略它应该占用更多空间。

现在我试图从here使用contentWidth。但是,这总是返回一个等于或小于实际宽度的值。我认为这应该返回它应该占据的总价值?

我该如何做到这一点?

编辑

我想这样的事情,但是不管我的文字是多久或多截断它是内容的宽度总是比标签的宽度。我从qml文档中得到了contentWidth即使忽略文本也会考虑到的印象。

Rectangle{ 
    id: rec 
    ... 
    Label{ 
    id: messageText 
    height: Format.singleLine 
    text: "this text is very long and should be two lines" 
    Component.onCompleted: { 
     if (contentWidth > width){ 
     rec.height = Format.multipleLines 
     } 
    } 
    } 
} 

第二个编辑

我才知道,为什么lineCount总是一个原因是由于编程创建对象(myRectangle是包含标签的矩形):

messages.source = Qt.resolvedUrl("myRectangle.qml"); 
    messages.item.message = message; 

后标签创建的第一行label使用lineCount 1。然后我会尝试更改仅在此点之后被截断的文本。

+0

显示您的代码请 – eyllanesc

+0

我只是想能够这样做: 宽度:(contentWidth>宽度)? Format.multipleLines:Format.singleLine; –

+0

我认为你已经有足够的声望知道你必须提供[最小,完整和可验证的示例](https://stackoverflow.com/help/mcve)。除此之外,你应该知道如何[编辑](https://stackoverflow.com/posts/45425718/edit)你的问题。 – eyllanesc

回答

1

怎么是这样的:

height: lineCount > 1 ? Format.multipleLines : Format.singleLine 
+0

这并没有起作用,因为lineCount会根据当前高度而有所不同。我最终将标签高度初始化为多行,然后如果只有一行,则将高度更改为singleLine。 –

0

如果矩形只包含你的标签,你可以做这样的事情依赖于标签的wrapMode属性和矩形的childrenRect.height财产。

Rectangle { 
    anchors.centerIn: parent 
    width: 200 
    height: childrenRect.height 
    border.width: 1 

    Label { 
     id: messageText 
     width: 200 
     wrapMode: Text.Wrap 
     text: "This text is very long very long. Like way too long to fit on a single line." 
    } 
} 

另外,如果你不介意你的标签包含矩形的,而不是周围的其他方法,你可以这样做:

Label { 
    id: messageText 
    anchors.centerIn: parent 
    width: 200 
    wrapMode: Text.Wrap 
    text: "This text is very long very long. Like waaaaay too long to fit on a single line." 

    Rectangle { 
     anchors.fill: parent 
     z: -1 
     border.width: 1 
    } 
} 
0

我不知道是否有更好的办法要做到这一点,但此代码为我做了(这是在标签内):

onContentWidthChanged: { 
     if((lineCount === 1) && (contentWidth !== 0)){ 
      rec.height = Format.singleLine; 
     } 
     else{ 
      rec.height = Format.multipleLines; 
     } 
    } 

我初始化高度为Format.multipleLines。然后,一旦文本被说明(ContentWidth不是0),我检查lineCount是否是1。如果是这样,我将高度修改为format.singleLine。

请注意,在创建组件后,onContentWidth会调用两次。首次contentWidth将始终为0(因此需要检查它)。

相关问题