我正在尝试实现一个默认情况下应该(如果没有显式设置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
已更新(在非restricted
模式下),则组件的宽度不会更改(即Text
仍然被省略)。
例如,在启动示例后立即按右键。您应该看到Text
已被删除,但其宽度没有增加
两次,不管字符串是否重复。