![](/img/trans.png)
[英]Unexpected loop when binding property to delegate index via function
[英]Binding loop on ListView delegate
我有此代碼,這給了我這個錯誤:
file:///home/user/qmltests/bindingheight.qml:29:5: QML Pane: Binding loop detected for property "height"
為什么會產生循環? 我該如何解決呢?
import QtQuick 2.11
import QtQuick.Controls 2.4
import QtQuick.Layouts 1.11
ListView {
width: 300
height: 600
clip: true
model: ListModel {
id: fruitModel
ListElement {
name: "Apple Apple Apple Apple Apple Apple Apple Apple Apple Apple Apple Apple"
cost: 2.45
}
ListElement {
name: "Orange Orange Orange Orange Orange Orange Orange Orange Orange Orange"
cost: 3.25
}
ListElement {
name: "Banana Banana Banana Banana Banana Banana Banana Banana Banana Banana"
cost: 1.95
}
}
delegate: Item {
width: 200
height: childrenRect.height * 1.1
Pane {
height: contentItem.childrenRect.height
anchors.left: parent.left
anchors.right: parent.right
anchors.bottomMargin: 20
padding: 10
background: Rectangle { anchors.fill: parent; color: "gray";}
MouseArea {
anchors.fill: parent
onClicked: {
console.log("Executing action on the item")
}
}
ColumnLayout {
anchors.top: parent.top
anchors.left:parent.left
anchors.right: parent.right
Label {
id: item_to_hide
text: model.name
wrapMode: Label.WordWrap
Layout.maximumWidth: parent.width
}
Label {
text: model.cost
}
Button {
text: " Hide element "
onClicked: {
item_to_hide.visible=false
}
}
Button {
text: " Show element "
onClicked: {
item_to_hide.visible=true
}
}
}
}
}
}
這是在Qt 5.11中進行的,測試是使用qmlscene完成的,只需復制/粘貼並輸入到bin / qmlscene中即可重現錯誤。
使用相同的代碼,你寫的只是改變height
的Pane
來implicitHeight
。 這將打破由height
創建的循環。
Pane {
implicitHeight: contentItem.childrenRect.height
anchors.left: parent.left
anchors.right: parent.right
anchors.bottomMargin: 20
padding: 10
background: Rectangle { anchors.fill: parent; color: "gray";}
MouseArea {
anchors.fill: parent
onClicked: {
console.log("Executing action on the item")
}
}
...
使用ID標識您的組件,而不是使用children*
/ content*
屬性。 您和QML都將更容易理解您的代碼。 這對我有用:
import QtQuick 2.11
import QtQuick.Controls 2.4
import QtQuick.Layouts 1.11
ListView {
width: 300
height: 600
clip: true
model: ListModel {
id: fruitModel
ListElement {
name: "Apple Apple Apple Apple Apple Apple Apple Apple Apple Apple Apple Apple"
cost: 2.45
}
ListElement {
name: "Orange Orange Orange Orange Orange Orange Orange Orange Orange Orange"
cost: 3.25
}
ListElement {
name: "Banana Banana Banana Banana Banana Banana Banana Banana Banana Banana"
cost: 1.95
}
}
delegate: Item {
width: 200
height: panneau.height * 1.1
Pane {
id: panneau
height: clayout.height
anchors.left: parent.left
anchors.right: parent.right
anchors.bottomMargin: 20
padding: 10
background: Rectangle {
anchors.fill: parent
color: "gray"
}
MouseArea {
anchors.fill: parent
onClicked: console.log("Executing action on the item")
}
ColumnLayout {
id: clayout
anchors.top: parent.top
anchors.left: parent.left
anchors.right: parent.right
Label {
id: item_to_hide
text: model.name
wrapMode: Label.WordWrap
Layout.maximumWidth: parent.width
}
Label {
text: model.cost
}
Button {
text: " Hide element "
onClicked: item_to_hide.visible = false
}
Button {
text: " Show element "
onClicked: item_to_hide.visible = true
}
}
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.