右键单击QTreeVi内部的QHeaderView

2024-10-01 09:20:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经编写了一个包含多个列的QTreeView的后代。我想创建一个弹出菜单,当用户右键单击列标题时出现。为此,我尝试从QTreeView捕获信号,但是QTreeView似乎没有在头上发出信号。QTreeView.header()有。因此,我认为我必须:
1: 将QHeaderView的一个信号连接到弹出函数-我找不到一个右击触发的信号-我尝试过sectionClicked、sectionHandleDoubleClicked、sectionDoubleClicked,sectionPressed(不奇怪双击函数没有捕捉到一个右键单击-但是它们确实捕捉到一个右键双击)

self.header().sectionClicked.connect(self.headerMenu)
self.header().sectionHandleDoubleClicked.connect(self.headerMenu)
self.header().sectionDoubleClicked.connect(self.headerMenu)
self.header().sectionPressed.connect(self.headerMenu)

或者,
2: 用我自己的MousePressEvent函数编写一个QHeaderView的后代,并将其用于我的头文件。到目前为止,我没有成功地将新的头类连接到QTreeView子代。我一直在运行时得到一个分段错误,没有更多的解释。在

^{pr2}$

有什么想法吗?在


Tags: 函数用户self信号connect菜单header右键
2条回答

我发现了setContextMenuPolicy函数:

self.header().setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
self.header().customContextMenuRequested.connect(self.headerMenu)

然后,在headerMenu中:

^{pr2}$

我倾向于解决方案n°2:编写继承QHeaderView的自己的类。 您的分段错误可能是由python/pyqt故障引起的? 您应该通过保持对DiceHeaders对象的引用来确保它存在。在

相关问题 更多 >