繁体   English   中英

Qt删除QTableView中的选定行

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM