迭代 QTableView 的行

问题描述 投票:0回答:2

我有一个 QTableView,显示模型中特定 QModelIndex 的子级(其中具有分层数据,表当然无法显示)。我希望能够迭代表视图中的所有项目,即 rootIndex 的所有子项。我怎样才能有效地做到这一点?我使用 table.rootIndex() 引用了父索引,但是我没有看到任何方法可以在不迭代整个模型的情况下迭代索引的子项,这似乎是错误的。

这是 QSortFilterProxyModel 在表中安装模型子集的工作吗?我刚才说的还有道理吗?!

这是一个快速启动和运行的示例

class Sample(QtGui.QDialog):
    def __init__(self):
    super(Sample, self).__init__()
        model = QtGui.QStandardItemModel(self)

        parent_index1 = QtGui.QStandardItemModel("Parent1")
        model.appendRow(parent_index1)

        parent_index2 = QtGui.QStandardItemModel("Parent2")
        model.appendRow(parent_index2)

        one = QtGui.QStandardItem("One")
        two = QtGui.QStandardItem("Two")
        three = QtGui.QStandardItem("Three")

        parent_index1.appendRows([one, two, three])

        table = QtGui.QTableView(self)
        table.setModel(model)
        table.setRootIndex(model.index(0,0))

        # okay now how would I loop over all 'visible' rows in the table? (children of parent_index1)
python pyqt pyqt4 qstandarditemmodel
2个回答
2
投票

希望这个答案对其他可怜的灵魂有帮助。

QTableView 只是模型的视图。关键是您应该迭代模型,而不是视图。这将遍历 QTableView 模型中的每一行以及每行中的每一列。您可以根据需要进行修改。

for r in range(tableView.model().rowCount()):
   for c in range(tableView.model().columnCount()):
      index = tableView.model().index(r, c)

0
投票

好吧,我觉得很愚蠢,我明白了。忘记了

model.index()
允许你指定一个父母......我想其他一些可怜的灵魂可能会像我一样困惑,所以在这里你去:

for row in range(self.model.rowCount(self.table.rootIndex())):
    child_index = self.model.index(row, 0, self.table.rootIndex())) # for column 0
© www.soinside.com 2019 - 2024. All rights reserved.