У меня есть QML ColumnLayout с несколькими дочерними элементами, и я хочу ограничить его ширину, например:
ColumnLayout {
width: 360
height: 480
ColumnLayout {
id: inner
Layout.maximumWidth: 200
Layout.fillHeight: true
Text {
text: "Welcome"
font.pixelSize: 18
}
Text {
text: "Long explanation that should wrap, but ends up overflowing layout"
wrapMode: Text.WrapAnywhere
}
}
Rectangle {
anchors.fill: inner
z: -1
border.color: "orange"
}
}
Получаю результат, показанный на картинке ниже.
Оранжевый прямоугольник показывает размеры элемента внутренней компоновки, с которым все в порядке. Однако дочерний текст макета не переносится.
Я могу исправить это, только добавив
Layout.maximumWidth: parent.width
к моим элементам "Текст", но это довольно неудобный подход. Я делаю что-то не так, или это ошибка Qt, или по какой-то причине это дизайнерский подход? Я использую Qt 5.4.1.
Invalid property assignment: "contentWidth" is a read-only property
02.06.2015maximumWidth
, вероятно, работает, потому что макет (ColumnLayout
, а не функциональность макета текстаText
) увидит, что неявная ширина текста слишком велика, и явно установит меньшую ширину. Другими словами, это фактически то же самое, чтоwidth: parent.width
илиLayout.fillWidth: true
. Лично я предпочитаю подход, указанный в вашем вопросе, так как вы должны использовать прикрепленные свойстваLayout
, если ваши элементы находятся в макете. 02.06.2015