我的想法是发出索引,以便我可以在其他地方捕获它并从该索引更新信息。它工作得很好 - 除非我滚动(同时保持鼠标静止),不会发出正确的索引。我猜测这是因为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)
答案 0 :(得分:3)
在不同事件之间保存QModelIndex
是不安全的。您需要改为使用QPersistentModelIndex
。
答案 1 :(得分:0)
我现在感觉有点愚蠢。问题正是我之前所说的。我抓住索引后发生了实际的滚动,因为我最后调用了超类方法(呃!)。我所要做的就是将超类方法移到顶部。