我有QListView,带有一个项目委托,当鼠标悬停在项目委托上时,该委托会动画化。 这是通过使用自定义窗口小部件的委托并通过将光标下方的索引弹出到编辑模式来完成的,如下所示(在列表视图中激活了鼠标跟踪):
def mouseMoveEvent(self, event):
if index.isValid():
# start playing playing under cursor
self.edit(index)
这很好用,我还有一种机制可以关闭编辑器,以确保当鼠标在列表视图中移动时,只有一个项目正在播放。 现在的问题是拖放行为受到了影响-但只有在Windows和Linux下,它才能在OSX上正常工作。
要使用我的QListView的默认拖动行为,我会使用mousePressEvent()在单击鼠标左键时关闭编辑器,如下所示:
def mousePressEvent(self, event):
if self.currentEditor:
try:
# clean up open editor
self.currentEditor.setFocusPolicy(QtCore.Qt.NoFocus)
self.closeEditor(self.currentEditor, QtGui.QAbstractItemDelegate.NoHint)
self.commitData(self.currentEditor)
self.setFocus()
except RuntimeError:
# no current editor. click happened outside the thumbnails
pass
super(ElementView, self).mousePressEvent(event)
最后一行是对父类的调用,以使其开始常规拖动事件。
在OSX上,我可以将鼠标悬停在该项目上以使其播放,然后单击并拖动以将其拖走。在Windows上,我必须单击两次而不移动鼠标,然后再发生同样的事情。 我尝试设置视图的setState()以确保视图未处于编辑状态。我也尝试过将焦点集中在mousePressEvent()中的视图上,但似乎都没有帮助。
任何帮助将不胜感激。
[编辑]与拖动无关,因为我在上下文菜单中遇到相同的问题。在Windows上,我必须右键单击两次以将其打开,在OSX上,它可以正常工作。我已经编辑了标题,使其更加具体。
坦白