我有一个PyQt的QTableView,与一个QAbstractTableModel连接,这个模型又连接到一个管理项目列表的自定义类。我可以在列表末尾插入项目,并适当地通知我的模型,然后调用beginInsertRows和endInsertRows函数。我可以验证它调用了这两个函数,列表也已更新,但表格不会调用data以检索更新的行。
发生了什么?我该如何解决?
发生了什么?我该如何解决?
class FigureTableModel(QAbstractTableModel):
def __init__(self):
QAbstractTableModel.__init__(self)
def changed(index):
start_index = self.createIndex(index, 0)
end_index = self.createIndex(index, COLUMNS - 1)
self.dataChanged.emit(start_index, end_index)
def adding_row(index):
self.beginInsertRows(self.createIndex(0, 0), index, index)
print 'adding ', index
def added_row(index):
self.endInsertRows()
print 'added'
figures.dataChanged.connect(changed)
figures.rowAdding.connect(adding_row)
figures.rowAdded.connect(added_row)
def rowCount(self, parent):
return len(figures)
def columnCount(self, parent):
return COLUMNS
def data(self, index, role):
print 'in data'
if not index.isValid():
return EMPTY
return figures[index.row()].get_table_item(index.column(), role)
createIndex
...从技术上讲,在任何地方使用它都没有问题,但是没有太多的理由这样做。通常只有index
和parent
需要创建一个QModelIndex
。其他方法可以向这些方法请求索引。 - Avaris