如何将附加属性放入子项

时间:2016-01-06 01:16:43

标签: qt qml qt5 qtquick2

我们假设我有一个这样的组件

RowLayout {
    MyItem {
        Layout.fillWidth: true
        Layout.fillHeight: true
        ... // other properties
    }
    MyItem {
        Layout.fillWidth: true
        Layout.fillHeight: true
        ... // other properties
    }
}

其中MyItem.qml的定义如下

Rectangle {
    ... // other properties
    // Layout.fillWidth: true
    // Layout.fillHeight: true
}

我可以将Layout.fillWidth加到MyItem,这样我就不需要在RowLayout中重复一次了吗?

2 个答案:

答案 0 :(得分:1)

  

我可以将Layout.fillWidth放到MyItem中,所以我不需要在RowLayout中重复它吗?

我认为问题的答案在其中:如果您不想重复,只需使用Repeater类型。文档说明了

  

Repeater实例化的项目按顺序插入,作为Repeater父项的子项。插入在转发器在其父堆栈列表中的位置后立即开始插入。这允许在布局中使用Repeater

文档中的示例使用 1 test1.txt 2 test2.txt Please select a file number: 3 Please select a file number: 2 You have selected 'test2.txt' 但是同样的方法可以应用于其他布局,例如Row。实际上,它适用于具有RowLayout性质的附加属性的任何类型(“在父级中插入项目”)。

这是一个例子。假设我们已经定义了Repeater类型。

Example

我们可以将布局属性添加到import QtQuick 2.5 Rectangle { property alias text: inner.text color: "steelblue" Text { id: inner anchors.centerIn: parent font.pixelSize: 30 } } 内的Example类型,例如:

Repeater

import QtQuick 2.5 import QtQuick.Window 2.2 import QtQuick.Layouts 1.1 Window { id: window width: 600 height: 400 visible: true RowLayout { id: row anchors.fill: parent Repeater { model: 6 delegate : Example { text: index Layout.fillWidth: true // layout options added in the delegate Layout.fillHeight: true Layout.alignment: Qt.AlignCenter Layout.maximumWidth: parent.width / model.length } } } } 的{​​{3}}属性可以像往常一样是字符串数组或其他模型。

这种方法足够灵活,可以组合多个Repeater来创建更复杂的结构。例如,请参阅以下示例,其中Repeater用于填充Text内的屏幕:

GridLayout

答案 1 :(得分:0)

是的,你可以这样做,但是当你决定在没有名为Layout.fillWidth的附加属性的上下文中使用该组件时,它会以错误结束,或者更常见的是,当你决定不这样做时将它用作布局中的顶部元素。