Qt删除QTableView中的选定行

lau*_*ura 7 c++ qt qtableview qabstracttablemodel

我想在单击delete按钮时从表中删除选定的行.

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

图片

lpa*_*app 14

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

在这里你可以找到所有这些的例子.

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

removeRows()

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

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


Spe*_*cer 6

如果您要删除多行,则使用该调用可能会遇到一些复杂情况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)
Run Code Online (Sandbox Code Playgroud)

非常适合我!然而需要知道的一件事是,在我的例子中,当用户单击特定单元格(其中有一个带有“X”的按钮)时,该函数就会被调用。不幸的是,当他们单击该按钮时,它会取消选择该行,从而阻止其被删除。为了解决这个问题,我只是捕获了发件人的行并将其附加到“remove_list”的开头,“for 循环”之前。看起来像这样:

rows.add(self.table.indexAt(self.sender().pos()).row())
Run Code Online (Sandbox Code Playgroud)