2017-09-23 106 views
0

我有一个Excel格式的表格。我知道我需要发出dataChanged信号从我的模型为了更新我的视图,它完美的作品。但是,当更新来自另一个(python)线程时,我需要在更新的单元格上设置鼠标(单击一次),以便显示新值。我知道新的价值在模型(我可以看到日志)设置正确,但观点是落后..在datachanged上立即更新视图

如果更新涉及已激活的细胞,更新立刻反映。

我应该发出什么样的信号才能强制View没有我点击右边的单元格而被更新?

编辑它现在有效。我需要实现QThread而不是普通pythhon线程,并将信号连接到数据模型中的处理程序。解决

回答

0

警告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) 

本作的警告了,并且更新的完美无缺