在视图中滚动时索引不正确

时间:2014-11-01 20:18:33

标签: python qt pyside

我的想法是发出索引,以便我可以在其他地方捕获它并从该索引更新信息。它工作得很好 - 除非我滚动(同时保持鼠标静止),不会发出正确的索引。我猜测这是因为wheelEvent在实际滚动发生之前就开始了。我虽然有点卡在这里。

class View(QtGui.QTreeView):
   hovered = QtCore.Signal(QtCore.QModelIndex)

   def __init__(self, parent=None):
      super(View, self).__init__(parent)

      self.setMouseTracking(True)

   def mouseMoveEvent(self, event):
      index = QtCore.QPersistentModelIndex(self.indexAt(event.pos()))
      if index.isValid():
         self.hovered.emit(index)

      super(TreeView, self).mouseMoveEvent(event)

   def wheelEvent(self, event):
      index = QtCore.QPersistentModelIndex(self.indexAt(event.pos()))
      if index.isValid():
         self.hovered.emit(index)

      super(TreeView, self).wheelEvent(event)

2 个答案:

答案 0 :(得分:3)

在不同事件之间保存QModelIndex是不安全的。您需要改为使用QPersistentModelIndex

答案 1 :(得分:0)

我现在感觉有点愚蠢。问题正是我之前所说的。我抓住索引后发生了实际的滚动,因为我最后调用了超类方法(呃!)。我所要做的就是将超类方法移到顶部。