Python中QStandardItemModel批量删除选中行索引越界问题求解
解决Qt列表选中项删除的索引越界问题
原代码的问题在于正向遍历列表时删除元素:每删除一个元素,后续元素的索引会自动前移,但循环仍按初始的rowCount()递增,这会导致跳过部分待检查元素,甚至触发索引越界。
正确的做法是从后往前遍历索引,这样删除当前元素不会影响尚未遍历的(更靠前的)元素的索引位置:
def delete_selected_accounts(self): # 从最后一行开始反向遍历 for i in range(self.model.rowCount() - 1, -1, -1): if self.model.item(i).checkState() == Qt.Checked: self.model.removeRow(i) self.account_list.pop(i)
原理说明
- 反向遍历从最大索引开始,逐步递减到0。删除索引
i的元素时,只有索引小于i的元素会前移,但这些元素还没被遍历到,不会干扰循环的正确性。 - 操作时要确保
self.model和self.account_list的修改同步,避免出现数据不一致的问题。
内容的提问来源于stack exchange,提问作者themmfa
相关产品推荐
相关产品推荐

