gpt4 book ai didi

qml - 根据属性值有条件地包含组件

转载 作者:行者123 更新时间:2023-12-01 08:55:52 26 4
gpt4 key购买 nike

我有一个 ListView 显示来自 API 的一些数据。在我的列表项中,我需要有两个不同的组件树,具体取决于该行的数据。更具体地说,如果该行有关联的图像,我需要显示带有标签的图像,以某种方式排列。如果它没有图像,那么我只想显示一个标签,以不同的方式排列。对我来说,这听起来像是我想创建两个不同的组件并动态选择要包含的组件。

它目前看起来像这样,缩写形式:

ListItem.Empty {
id: matchItem
property string team1Name
property string team2Name
property string team1Logo
property string team2Logo

width: parent.width

Item {
id: team1Info
width: parent.width*0.3

anchors {
left: parent.left
top: parent.top
bottom: parent.bottom
}

Item {
anchors.fill: parent
anchors.margins {
top: units.gu(2)
bottom: units.gu(2)
}

Image {
id: team1LogoImage
source: team1Logo
width: parent.width
height: units.gu(5)
fillMode: Image.PreserveAspectFit
anchors.horizontalAlignment: parent.horizontalCenter
}

Label {
text: team1Name
anchors.horizontalAlignment: Text.Center
}
}
}

// Some more elements and a repeat of the above for the second team
}

问题是如果 team1Logoteam2Logo不是有效的 URL,例如如果团队没有 Logo ,则 Image 组件将失败。

我想做的基本上是:
if (team1Logo === "") {
Label {
// Stuff to make it look good without an image
}
} else {
Image {
source: team1Logo
}

Label {
// Stuff
}
}

但据我所知,这不是 QML 的工作方式。

我看过 Loader组件,这似乎符合要求,因为我可以在设置 source 时使用条件装载机上的属性(property),但我无法让它工作。有谁知道如何实现我所描述的?

最佳答案

结果证明实现 Loader 相当简单。 .例子:

Item {
id: team1Info

Loader {
id: team1ItemLoader
property string name: model.team1Name
property string logo: model.team1Logo

source: (logo) ? "TeamLogoItem.qml" : "TeamItem.qml"
}
}

在本例中, namelogo然后在 TeamLogoItem.qml 内可用或 TeamItem.qml作为属性。

关于qml - 根据属性值有条件地包含组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27695717/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com