我正在使用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)
可能是这样做的方法,但是由于根本没有调用我的简单函数,所以肯定还有其他一些我看不到的问题。
答案 0 :(得分:1)
我觉得很奇怪,在您的第一个代码中打印“ OK”,返回给我的是一个错误,因为connect也期望可调用,但是print('OK')返回None,这不是可调用的。此外,mouseDoubleClickEvent
并不是一个信号,而是一个重申我的陌生感的事件。
相反,您必须使用返回与项目关联的doubleClicked
的{{1}}信号,并且要获得位置,您必须使用QModelIndex
旁边的QCursor::pos()
mapFromGlobal()
的{{1}}中的一个。您还必须使用新的连接语法。
viewport()
PySide版本:
QTreeView