我正在尝试实现一个默认情况下(如果没有width
明确设置)应该占用尽可能多的空间的组件(即取决于它的implicitWidth
)。如果width
在定义时设置它应该缩小其内容以适应提供的区域。
这是一个例子:
import QtQuick 2.2
import QtQuick.Window 2.0
Window {
width: 200
height: 100
visible: true
property bool restricted: false
Component {
id: external
FocusScope {
implicitWidth: column.implicitWidth
implicitHeight: column.implicitHeight
focus: true
Column {
id: column
width: parent.width > 0 ? parent.width : undefined
Text {
id: label
width: parent.width > 0 ? parent.width : undefined
elide: Text.ElideRight
font.pixelSize: 24
text: "1234567890"
}
}
Keys.onRightPressed: label.text += label.text
}
}
Loader {
width: restricted ? 100 : undefined
sourceComponent: external
focus: true
Keys.onReturnPressed: restricted = !restricted
}
}
在这个示例中,两种模式由辅助bool
属性控制,我希望它支持两种声明形式:
显式宽度。
Text
应该省略。Loader { width: 100 sourceComponent: external focus: true }
Loader
宽度应该足以容纳整个文本而不会省略。Loader { sourceComponent: external focus: true }
动机是这样一个组件将在一个单独的文件中定义,并且被设计为放置在 UI 的不同部分中,这两种行为都取决于当前的需求。这个带有内联组件声明的示例仅用于演示目的。
更新:
以下技巧parent.width > 0 ? parent.width : undefined
有效,但仅适用于初始设置。如果组件内容更改并implicitWidth
更新(在 unrestricted
模式下),组件的宽度不会更改(即Text
保持省略)。
例如,在启动示例后立即按右键。你应该看到它Text
已经被省略了,但它的宽度并没有增加两倍,不管字符串是重复的。