1

我正在尝试实现一个默认情况下(如果没有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属性控制,我希望它支持两种声明形式:

  1. 显式宽度。Text应该省略。

    Loader {
        width: 100
        sourceComponent: external
        focus: true
    }
    
  2. Loader宽度应该足以容纳整个文本而不会省略。

    Loader {
        sourceComponent: external
        focus: true
    }
    

动机是这样一个组件将在一个单独的文件中定义,并且被设计为放置在 UI 的不同部分中,这两种行为都取决于当前的需求。这个带有内联组件声明的示例仅用于演示目的。

更新:

以下技巧parent.width > 0 ? parent.width : undefined有效,但仅适用于初始设置。如果组件内容更改并implicitWidth更新(在 unrestricted模式下),组件的宽度不会更改(即Text保持省略)。

例如,在启动示例后立即按右键。你应该看到它Text已经被省略了,但它的宽度并没有增加两倍,不管字符串是重复的。

4

0 回答 0