如何从QTableView的选定行获取值?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从QTableView的选定行获取值?相关的知识,希望对你有一定的参考价值。

我正在使用QTableView并尝试从所选行中检索值。在其他时候,我将使用多个行来处理:

self.tableView5.setSelectionMode(QtGui.QAbstractItemView.MultiSelection)

以下代码有效,但仅在选择第一行时才有效。但是,它显示:

identity[row].append(str(self.table_model5.data(index)))
IndexError: list index out of range

当单击另一行时。

names = []
emails = []
identity = []
data = sorted(set(index.row() for index in self.tableView5.selectionModel().selectedRows()))
for row in data:
    identity.append([])
    for column in range(0,2):
        index = self.table_model5.index(row, column)
        identity[row].append(str(self.table_model5.data(index)))
for item in identity:
    names.append(item[0])
    emails.append(item[1])
for name, recipient in zip(names, emails):
    print(name, recipient)
答案

这里的问题是由用于填充值列表的复杂方法引起的。我建议以下简化:

names = []
emails = []
identity = []
for index in sorted(self.tableView5.selectionModel().selectedRows()):
    row = index.row()
    name = self.table_model5.data(self.table_model5.index(row, 0))
    email = self.table_model5.data(self.table_model5.index(row, 1))
    identity.append((name, email))            
    names.append(name)
    emails.append(email)

请注意,不需要使用set,因为selectedRows只返回每个选定行的一个索引。

另一答案

它是identity[row]抛出这种例外。想象一下,您从表格行2和3中选择。然后在for row in data:循环的第一次迭代中,row的值将为2,而您的identity列表将是当时的一个元素。

调试并修复您的逻辑。

以上是关于如何从QTableView的选定行获取值?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 QTableView 获取活动/选定的 QRadioButton

Qt C++ 从 QTableView 中获取选定行的每个单元格的数据

获取所有行值给定一个单元格被选中 QTableView

从 QTableView 中的选定行访问 QAbstractTableModel 中的原始索引

如何在 QTableView 中获取选定的行

如何从 GridPanel 的选定行中获取值? [外网]