QML列不会自动设置子对象宽度

时间:2019-08-29 08:32:56

标签: qt layout qml

我正在尝试使用“列和行”来布局用户界面。

import QtQuick 2.6
import QtQuick.Window 2.2

Window{
    height: 200
    width : 300

    Row{
        height: parent.height
        width: parent.width
        Column{
            width: parent.width / 2
            height: parent.height
            Text{
                text: "Hello World!"
            }
            Text{
                wrapMode: Text.WordWrap
                text: "This text is so long that it doesn't fit inside the column on a single line, but I'd assume that column sets child object width."
            }

            Rectangle{
                height: parent.height - y
                width: parent.width
                color: "#aa0000aa"
                Text{
                    anchors.bottom: parent.bottom
                    text: "Hello2"
                }
            }
        }
        Column{
            height: parent.height
            width: parent.width / 2
            Text{
                text: "Hello1"
            }

            Rectangle{
                height: parent.height - y
                color: "#4c00aa00"
                width: parent.width
                Text{
                    anchors.bottom: parent.bottom
                    text: "Hello2"
                }
            }
        }

    }
}

Illustration

可以看出,文本对象的宽度未绑定到其父对象。

由于某些原因,我无法使用布局qml对象,因为它们锁定了我的目标系统。

我是否只需要在代码中加上width: parent.width还是可以解决这个问题?

1 个答案:

答案 0 :(得分:2)

是的,“ QML列”不会自动设置子对象的宽度,这是容器的预期行为(SwipeViewTabBar等少数例外)。

因此,您有责任根据需要安排孩子的大小。

在您的情况下,必须显式设置Text的宽度才能应用自动换行:

Text {
    width: parent.width
    wrapMode: Text.WordWrap
    // ...
}

或使用锚点:

Text {
    anchors {
        left: parent.left
        right: parent.right
    }
    wrapMode: Text.WordWrap
    // ...
}