3

这是我的 QML 文件,其中包含一个文本组件:

import QtQuick 2.0

Item {
    id: idItmWrapText
    Text {
        id: idTxtTitle
        text: qsTr("Hello World")
        font.pointSize: 20
       }
}

现在在Test.qml文件中,我将上述组件实例化了三次,但它在输出中只显示一次。我的Test.qml文件如下所示:

import QtQuick 2.0

Item {
    id: idItmWrapRect
    width: 400
    height: 400
    Rectangle{
        id: idRectDisplay

        width: parent.width
        height: parent.height

        Column {
            id: idClmnLayout
            spacing: 50
            x: 195
            y: 200

           MyText{

            }
            MyText{

            }
            MyText{

            }
        }
    }



}

输出是:

                     **Hello World**     //showing only once

为什么会这样?

4

1 回答 1

8

这是完全正常的:事实上,您的组件显示了 3 次,但彼此重叠,所以您认为只有其中一个...

为什么 ?

仅仅因为在您的组件中,您将 Text 放在 Item 中,但您没有告诉 Item 与内部 Text 的大小相同,因此它保持 0x0 大小。

但是为什么文本是可见的?

默认情况下,Item 没有被裁剪,这意味着即使内容超出了 Item 的边界,也可以显示内容。

如何解决?

只需将 Text 正确地锚定在 Item 内,并将 Item 高度绑定到 Text 实际高度上,在您的自定义组件内:

import QtQuick 2.0

Item {
    id: itmWrapText;
    width: 400; // default width of the component
    height: txtTitle.contentHeight; // bind height on Text content size

    property alias title : txtTitle.text; // btw, expose property to be able to set text

    Text {
        id: txtTitle;
        text: qsTr ("Hello World");
        font.pointSize: 20;
        wrapMode: Text.WrapAtWordBoundaryOrAnywhere; // wrap content if necessary
        anchors { // force Text to stay in parent Item
            top: parent.top;
            left: parent.left;
            right: parent.right;
        }
    }
}

它完成了!

于 2013-08-07T08:08:59.977 回答