Qt qml如何从ListView中只检查一个开关
Posted
技术标签:
【中文标题】Qt qml如何从ListView中只检查一个开关【英文标题】:Qt qml how to check only one switch from a ListView 【发布时间】:2020-02-04 13:47:33 【问题描述】:我有一个显示语言和相应开关的 qml ListView,如下面的代码所示。最初选择英语。但是,使用此代码,我可以选择多种语言。我只想选择一种(当我选择一种语言时,其他语言会自动取消选择)。怎么做?
ListView
id: langlist
clip: true
model: ListModel
ListElement selected:true; title: "English"
ListElement selected:false;title: "French"
ListElement selected:false;title: "German"
ListElement selected:false;title: "Italian"
delegate: Rectangle
id: langelement
height: 70
width: parent.width
color: "transparent"
Label
anchors.left: langelement.left
anchors.leftMargin: 30
anchors.top : langelement.top
anchors.topMargin: 30
text: model.title
font.family: "Lato"
font.pixelSize: 30
font.bold: false
color: "#FFFFFF"
Switch
id: control
anchors.right: langelement.right
anchors.rightMargin: 30
anchors.top : langelement.top
anchors.topMargin: 20
checked: model.selected
【问题讨论】:
【参考方案1】:我会说您应该为此使用 ComboBox,因为它用于选择单个项目。
如果你坚持使用 ListView,你可以这样做:
ListView
id: langlist
clip: true
property int selectedIndex : 0
model: ListModel
ListElement selected:true; title: "English"
ListElement selected:false;title: "French"
ListElement selected:false;title: "German"
ListElement selected:false;title: "Italian"
delegate: Rectangle
id: langelement
height: 70
width: parent.width
color: "transparent"
Label
anchors.left: langelement.left
anchors.leftMargin: 30
anchors.top : langelement.top
anchors.topMargin: 30
text: model.title
font.family: "Lato"
font.pixelSize: 30
font.bold: false
color: "#FFFFFF"
Switch
id: control
anchors.right: langelement.right
anchors.rightMargin: 30
anchors.top : langelement.top
anchors.topMargin: 20
checked: selectedIndex == index
onToggled: selectedIndex = index
【讨论】:
它说“无效的属性名称“onToggled””。我正在使用 Qt 5.8.0 和 QtQuick.Controls 2.0 我正在按照设计模型创建应用程序。该模型不使用组合框,而是使用带有开关的语言名称。所以这就是我选择 ListView 的原因。 我已经通过 onPressed 更改了 onToggled。它仍然不起作用。当我检查它打开并直接关闭的开关时,尽管 selectedIndex 属性获取索引的新值。以上是关于Qt qml如何从ListView中只检查一个开关的主要内容,如果未能解决你的问题,请参考以下文章
如何使 Qt Quick (QML) ListView 项目无法选择?