【发布时间】:2012-12-09 14:44:15
【问题描述】:
默认情况下,PyQt 中的内置视图可以在其模型更新时自动刷新。我写了自己的图表视图,但是不知道怎么做,不得不手动更新很多次。
我应该使用哪个信号?
【问题讨论】:
标签: python qt user-interface qt4 pyqt
默认情况下,PyQt 中的内置视图可以在其模型更新时自动刷新。我写了自己的图表视图,但是不知道怎么做,不得不手动更新很多次。
我应该使用哪个信号?
【问题讨论】:
标签: python qt user-interface qt4 pyqt
您需要将您的视图连接到模型的dataChanged ( const QModelIndex & topLeft, const QModelIndex & bottomRight ) 信号:
只要现有项目中的数据发生变化,就会发出此信号。
如果项目属于同一父项,则受影响的是那些 在 topLeft 和 bottomRight 之间。如果物品没有 同一个父级,行为未定义。
当重新实现 setData() 函数时,这个信号必须是 明确发出。
【讨论】:
QTableView(),如果我setModel(model),setQuery(sql),然后setQuery(another_sql),视图会自动刷新。我的视图怎么能做同样的事情?
QAbstractItemView?
setQuery()时发出了哪个信号?
dataChanged信号时,视图dataChanged插槽被调用,你应该在你的视图中实现它
如果你没有来自模型的 index() 对象,你可以从模型或模型外部调用数据更改信号,如果你从模型调用,请执行下一步:
self.dataChanged.emit(index, index)
一些模型函数可以获取索引,例如:
def setData(self, **index**, value)
所以,你可以调用信号:
def setData(self, index, value):
#do something
self.dataChanged.emit(index, index)
信号上的索引指示哪个元素改变了它的数据 如果您想从模型外部更改、刷新或重新加载数据并且您没有索引,则无需指示将更改哪个元素,因此,您可以应用下一行
self.yourmodel.dataChanged.emit(QtCore.QModelIndex(), QtCore.QModelIndex())
这将刷新所有已更改的数据。
【讨论】: