尝试捕获鼠标位置时,QTreeView上的DoubleClick事件没有结果

时间:2019-04-25 10:03:29

标签: python pyqt4 pyside signals-slots qtreeview

我正在使用Python 3.6和pyqt 4.11。我将两个QTreeViews堆叠在一个Widget中,它们两个都显示一些批处理作业,因此每个步骤都可以扩展以显示所有功能。我希望能够双击树视图的一行并生成一个弹出对话框,在其中可以编辑双击函数的参数。

如果我在没有捕获位置的情况下连接了双击信号:

self.connect(self.QTreeView, QtCore.SIGNAL('mouseDoubleClickEvent()'),print('OK'))

它可以工作,并且可以打印OK。

但是,一旦我尝试捕获光标位置,就什么也没有发生。我已经尝试将整个小部件和treeView连接到一个简单的测试功能。根本不起作用,甚至无法打印。


self.connect(self.QTreeView, QtCore.SIGNAL('mouseDoubleClickEvent(const QPoint &)'),self.showDlg)

def showDlg (self, point):
        print ('OK')
        treeidx=self.treeview.indexAt(point)
        print (treeidx)

右键单击整个窗口小部件即可触发ContextMenu,并且可以正常运行

self.QTreeWidget.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)   

self.connect(self.QTreeWidget, QtCore.SIGNAL('customContextMenuRequested(const QPoint &)'), self.customMyContextMenu)

但是双击相同的小部件没有结果

self.connect(self.QTreeWidget, QtCore.SIGNAL('mouseDoubleClickEvent(const QPoint &)'),self.showDlg)

我想使用指针位置来知道必须在树形视图的哪个叶子中进行更改,我想 treeview.indexAt(point) 可能是这样做的方法,但是由于根本没有调用我的简单函数,所以肯定还有其他一些我看不到的问题。

1 个答案:

答案 0 :(得分:1)

我觉得很奇怪,在您的第一个代码中打印“ OK”,返回给我的是一个错误,因为connect也期望可调用,但是print('OK')返回None,这不是可调用的。此外,mouseDoubleClickEvent并不是一个信号,而是一个重申我的陌生感的事件。

相反,您必须使用返回与项目关联的doubleClicked的{​​{1}}信号,并且要获得位置,您必须使用QModelIndex旁边的QCursor::pos() mapFromGlobal()的{​​{1}}中的一个。您还必须使用新的连接语法。

viewport()

PySide版本:

QTreeView