gpt4 book ai didi

qt - 从 ListView 中选择多个项目

转载 作者:行者123 更新时间:2023-12-05 00:55:15 27 4
gpt4 key购买 nike

我想从 ListView 中选择多个项目.在 C++我会做这样的事情

if (clicked_card->is_selected) {
clicked_card->is_selected = false;
int i = 0;
while(selected_cards[i] != clicked_card) i++;
selected_cards.erase(selected_cards.begin() + i);
} else {
clicked_card->is_selected = true;
selected_cards.push_back(clicked_card);
}

上面的代码使用指针进行比较。那么如何在 QML 中进行这样的选择.我想出的解决方案是这样的

Card.qml
Image {
id: delegate
property bool isSelected: false
...
MouseArea {
onClicked: {
if(isSelected === true) {
isSelected = false;
gameScene.deselectCard(selectSeq);
}
else {
isSelected = true;
gameScene.selectCard({'opParam': opParam, 'selectSeq': selectSeq});
}
}
}
}

GameScene.qml
Item {
id: gameScene
property var selectedCards: []

signal selectCard(variant userData)
onSelectCard: {
gameScene.selectedCards.push(userData)
}

signal deselectCard(variant userData)
onDeselectCard: {
for (var i = 0; i < gameScene.selectedCards.length; i += 1) {
if (gameScene.selectedCards[i].selectSeq == userData) {
gameScene.selectedCards.splice(i, 1);
break;
}
}
}
}

上面代码的问题是我正在存储属性 isSelected在由系统创建和销毁的委托(delegate)中。所以这给了我错误的解决方案。有没有更好的多选方法或解决方案有任何改进?我正在使用 model从 C++ 继承 QAbstractListModel .

最佳答案

我在 Qt 中找到了答案文档。我只需要使用 [DelegateModel][1] .它有一个 group属性,对于在 DelegateModel 中定义的每个组两个附加属性被添加到每个委托(delegate)项目。表格中的第一个 DelegateModel.in*GroupName*保存项目是否属于组和第二个DelegateModel.*groupName*Index保存该组中项目的索引。

  import QtQuick 2.0
import QtQml.Models 2.2

Rectangle {
width: 200; height: 100

DelegateModel {
id: visualModel
model: ListModel {
ListElement { name: "Apple" }
ListElement { name: "Orange" }
}

groups: [
DelegateModelGroup { name: "selected" }
]

delegate: Rectangle {
id: item
height: 25
width: 200
Text {
text: {
var text = "Name: " + name
if (item.DelegateModel.inSelected)
text += " (" + item.DelegateModel.selectedIndex + ")"
return text;
}
}
MouseArea {
anchors.fill: parent
onClicked: item.DelegateModel.inSelected = !item.DelegateModel.inSelected
}
}
}

ListView {
anchors.fill: parent
model: visualModel
}
}

其他解决方案是移动属性 isSelected到 C++ 数据模型并使用 getter 和 setter 函数来更新更改。

关于qt - 从 ListView 中选择多个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38438235/

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