[英]Qt Delete selected row in QTableView
我想在单击delete
按钮时从表中删除选定的行。
但我找不到有关删除Qt文档中的行的任何内容。 有任何想法吗?
您可以使用bool QAbstractItemModel::removeRow(int row, const QModelIndex & parent = QModelIndex())
功能。
在这里你可以找到所有这些的例子 。
此外,这是该文档的内联引用:
removeRows()
用于从所有类型的模型中删除行及其包含的数据项。 实现必须在将新列插入任何基础数据结构之前调用beginRemoveRows(),然后立即调用endRemoveRows()。
该任务的第二部分是将按钮的单击信号连接到执行删除的插槽。
您可以通过从数据库中删除行来使用另一种方法,然后清除模型并再次填充它,当您删除多行时,此解决方案也是安全的。
如果要删除多行,可以使用removeRow()
调用遇到一些复杂问题。 这对行索引进行操作,因此您需要从下往上删除行,以便在删除行索引时保持行索引不变。 这是我在PyQt中做到的,不知道C ++,但我想它非常相似:
rows = set()
for index in self.table.selectedIndexes():
rows.add(index.row())
for row in sorted(rows, reverse=True):
self.table.removeRow(row)
对我来说很完美! 然而有一件事要知道,在我的情况下,当用户点击特定单元格(具有带“X”的按钮)时,会调用此函数。 不幸的是,当他们点击那个按钮时,它取消选择该行,然后阻止它被删除。 为了解决这个问题,我刚刚捕获了发送者的行,并在“for循环”之前将其附加到“remove_list”的最开头。 看起来像这样:
rows.add(self.table.indexAt(self.sender().pos()).row())
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.