如何清空 QTableView

3

我有一个 QTableView。我使用 QtSql.QSqlQuery 从数据库查询数据。

SQL = 'SELECT * FROM table1'
Query = QtSql.QSqlQuery(database)
Query.prepare(SQL)
Query.exec_()

model = QtSql.QSqlTableModel()
model.setTable('Table')
model.setQuery(Query)

proxy = QtGui.QSortFilterProxyModel()
proxy.setSourceModel(model)

QTableView.setModel(proxy)

一切正常,查询结果显示在QTableView中。

我的问题是当我更改SQL语句时,如果Query返回0个记录,我需要清除QTableView中的数据和单元格。

我尝试使用QTableView.clear(),它可以清除单元格中的数据,但是会留下空行和列。如何完全清除QTableView

4个回答

3
在C++中,QAbstractItemView有一个reset函数。你可以这样说: yourTableView.reset();

这不会清除数据。 - mike rodent

2

我的数据清理研究成功了。

我使用了proxy.deleteLater()

希望有人能从中受益,遇到相同的情况。


1
这会移除小部件,但不是清除 QTableView 数据的最佳方法。 - NL23codes

1
在这种情况下,我更喜欢使用一些解决方法,因为QTableView的限制。在我的个人程序中,我决定隐藏QTableView的行和列,使其看起来像是默认和空白的。原因是,如果您删除小部件,您需要替换它,并且这也会重置所有对象的属性。这理论上可能会迫使您每次需要将其显示为空白或清除时都重新分配QTableView的所有属性。与其删除小部件,这个提议的选项只需要两个简单的循环就可以完成,当您刷新表格并想要再次显示值时,只需要两个简单的循环即可完成工作。
有多种方法可以填充QTableView,但无论您使用哪种方法,您只需要遍历表格的行和列即可。以下是我使用的方法,基于从QtCore.QAbstractTableModel继承的类,这样当我调用dataFrame时,它返回一个包含QTableView数据的pandas数据帧。
如果您需要隐藏表格:
for _row in range(len(yourQTableView.model().dataFrame.index)):
    yourQTableView.hideRow(_row)

for _col, col_name in enumerate(yourQTableView.model().dataFrame.columns):
    yourQTableView.hideColumn(_col)

如果您需要显示表格:

for _row in range(len(yourQTableView.model().dataFrame.index)):
    yourQTableView.showRow(_row)

for _col, col_name in enumerate(yourQTableView.model().dataFrame.columns):
    yourQTableView.showColumn(_col)

对我来说,这是最简单的方法,可以得到我想要的结果。我想不出为什么这种方法不比完全删除小部件更好。

0
self.table_view.model().setRowCount(0)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接