QML TableView中实现Delegate内复选框单选功能需求
实现QML TableView复选框单选功能
要让TableView里的复选框只能单选,核心是维护一个全局的选中索引,让所有复选框的选中状态都和这个索引关联:
- 在TableView中添加一个属性存储当前选中的行索引,初始值设为
-1表示无选中项 - 把CheckBox的
checked属性绑定到当前行索引是否等于选中索引 - 勾选复选框时更新选中索引,取消勾选时(仅当前选中项)重置索引
修改后的完整代码:
TableView { id: table anchors.fill: parent // 存储当前选中的行索引,-1表示无选中 property int selectedIndex: -1 model: display_model TableViewColumn { role: "checkbox" delegate: CheckBox { id: delegate_checkbox // 绑定选中状态:仅当当前行索引等于selectedIndex时勾选 checked: table.selectedIndex === model.index onCheckedChanged: { if (checked) { // 勾选时更新选中索引为当前行 table.selectedIndex = model.index } else { // 取消勾选当前选中项时,重置索引为-1 if (table.selectedIndex === model.index) { table.selectedIndex = -1 } } } } } }
关键逻辑说明
selectedIndex作为全局状态,控制所有复选框的选中状态,确保同一时间只有一个复选框被勾选checked属性的绑定是单向同步,避免多个复选框同时被选中- 取消勾选当前选中项时,会清空选中状态,也可以根据需求去掉这部分逻辑,强制必须选中一个项
内容的提问来源于stack exchange,提问作者Moorthy
相关产品推荐
相关产品推荐

