在datachanged上立即更新视图
问题描述:
我有一个Excel格式的表格。我知道我需要发出dataChanged
信号从我的模型为了更新我的视图,它完美的作品。但是,当更新来自另一个(python)线程时,我需要在更新的单元格上设置鼠标(单击一次),以便显示新值。我知道新的价值是在模型(我可以看到日志)设置正确,但观点是落后..在datachanged上立即更新视图
如果更新涉及已激活的细胞,更新立刻反映。
我应该发出什么样的信号才能强制View没有我点击右边的单元格而被更新?
编辑它现在有效。我需要实现QThread而不是普通pythhon线程,并将信号连接到数据模型中的处理程序。解决
答
警告QObject::connect: Cannot queue arguments of type 'QVector<int>'
正在阻止dataChanged
信号被捕获。这是因为这个信号是从另一个(pythonic)线程发出的。为了使它工作,我需要继承QThead,如:
class MyThread(QThread):
updated = QtCore.pyqtSignal(str)
def run(self):
while 1:
result= do stuff...
self.updated.emit(result)
而且在我QAbstractTableModel
,信号连接到我的模型:
class TableModel(QAbstractTableModel):
def __init__(self, rowCount: int, colCount: int, parent=None):
super(QAbstractTableModel, self).__init__(parent)
self._listenerth = MyThread()
self._listenerth.updated.connect(self.remote_update_handler)
self._listenerth.start(QThread.LowPriority)
def remote_update_handler(self,result):
self.setData(QModelIndex,result, QtCore.Qt.EditRole)
本作的警告了,并且更新的完美无缺