9

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

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

图片

4

3 回答 3

15

You can use the bool QAbstractItemModel::removeRow(int row, const QModelIndex & parent = QModelIndex()) functionality for this.

Here you can find an example for all this.

Also, here is an inline quote from that documentation:

removeRows()

Used to remove rows and the items of data they contain from all types of model. Implementations must call beginRemoveRows() before inserting new columns into any underlying data structures, and call endRemoveRows() immediately afterwards.

The second part of the task would be to connect the button's clicked signal to the slot executing the removal for you.

于 2013-09-25T18:41:34.603 回答
4

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”的按钮)时,这个函数会被调用。不幸的是,当他们单击该按钮时,它会取消选择该行,从而阻止它被删除。为了解决这个问题,我刚刚捕获了发送者的行并将其附加到最开始的“remove_list”中,在“for 循环”之前。看起来像这样:

rows.add(self.table.indexAt(self.sender().pos()).row())
于 2018-05-19T17:16:52.320 回答
0

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

于 2015-06-30T10:57:43.837 回答