Qt删除QTableView中的选定行

问题描述 投票:7回答:3

当我点击delete按钮时,我想从表中删除选定的行。

但我找不到有关删除Qt文档中的行的任何内容。有任何想法吗?

c++ qt qtableview qabstracttablemodel
3个回答
14
投票

您可以使用bool QAbstractItemModel::removeRow(int row, const QModelIndex & parent = QModelIndex())功能。

在这里你可以找到所有这些的example

此外,这是该文档的内联引用:

removeRows()

用于从所有类型的模型中删除行及其包含的数据项。实现必须在将新列插入任何基础数据结构之前调用beginRemoveRows(),然后立即调用endRemoveRows()。

该任务的第二部分是将按钮的单击信号连接到执行删除的插槽。


1
投票

您可以通过从数据库中删除行来使用另一种方法,然后清除模型并再次填充它,当您删除多行时,此解决方案也是安全的。


1
投票

如果要删除多行,可以使用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())
© www.soinside.com 2019 - 2024. All rights reserved.