假設我想創建我的 CustomItem
//MyCustomItem.qml
RowLayout{
spacing: 0
Image{
id: divider
source: "qrc:/screen_header/vertical_divider_screen_header.png"
}
Item{ //THIS PART HERE SHOULD ALWAYS BE THE CHILDREN ITEMS
id:mid_item_TEXT_OR_IMAGE
Layout.alignment: Qt.AlignHCenter
}
Image{
id: divider2
source: "qrc:/screen_header/vertical_divider_screen_header.png"
}
}
我想使用這個 CustomItem 并且每個孩子都應該自動放置在“Item”中,但 Layout.alignment 應該保持不變。
例如
將影像放在里面會導致
//main.qml
MyCustomItem{
Image{
source: "qrc:/test.png"
}
}

在里面放置一個文本會導致
MyCustomItem{
Text{
text: "AUTO"
}
}

我怎樣才能做到這一點?
uj5u.com熱心網友回復:
您可以使用默認屬性mid_item_TEXT_OR_IMAGE通過以下代碼自動將影像/文本定向到:
default property alias children: mid_item_TEXT_OR_IMAGE.data
請注意,這允許MyCustomItem 中有多個元素(包括非可視元素)。如果您不想要這個,您可以使用 Control ( Qt doc ) 而mid_item_TEXT_OR_IMAGE不是contentItem.
順便說一句,Layout.alignment: Qt.AlignHCenter您真正想要的將不起作用,因為 RowLayout 將根據專案在水平軸上為專案分配一個位置。它確實適用于 Qt.AlignVCenter,因為它垂直于布局方向。
使用以下代碼,您可以像在影像中一樣將所有內容居中:
RowLayout {
default property alias data: mid_item_TEXT_OR_IMAGE.data
Rectangle { //replace with your Divider.png
width: 1
Layout.fillHeight: true
color: "white"
}
Item {
Layout.fillWidth: true
implicitWidth: mid_item_TEXT_OR_IMAGE.childrenRect.width
implicitHeight: mid_item_TEXT_OR_IMAGE.childrenRect.height
Item{ //THIS PART HERE SHOULD ALWAYS BE THE CHILDREN ITEMS
id:mid_item_TEXT_OR_IMAGE
width: childrenRect.width
height: childrenRect.height
anchors.centerIn: parent
}
}
Rectangle {
width: 1
Layout.fillHeight: true
color: "white"
}
}
通過使用implicitWidth 和implicitHeight,RowLayout 也將根據您輸入的內容而增長。反之亦然,您可以在使用它的地方為MyCustomItem 提供寬度/高度
uj5u.com熱心網友回復:
我認為您正在尋找的是默認屬性。如果您將默認屬性定義為 Item 的資料欄位,則默認情況下所有子物件都將成為該 Item 的子物件。
//MyCustomItem.qml
RowLayout{
default property alias contents: mid_item_TEXT_OR_IMAGE.data
Item{
id:mid_item_TEXT_OR_IMAGE
Layout.alignment: Qt.AlignHCenter
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/509838.html
