右键单击Qtreeview内部的Qheaderview
-
28-09-2019 - |
题
我已经写了一个带有多列的Qtreeview的后代。我想创建一个弹出菜单,该菜单在用户右键单击“列标题”上。为此,我尝试从Qtreeview捕获信号,但是Qtreeview似乎并没有在标题上发出信号。 qtreeview.header()做。因此,我相信我必须:
1:将Qheaderview的一个信号之一连接到弹出函数 - 我找不到单击单点触发的信号 - 我尝试了extiferclickClickClickClickClicked,sectibHandLeDledComplecked,sectiberDoubleclicked,sectionPlatsspatels(毫不奇怪,双击函数都不感到惊讶右键单击 - 但它们确实捕获了双右键单击)
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后代方面没有成功。我一直在运行时遇到细分错误,没有更多的解释。
#in DiceView's init, where DiceHeaders is the QHeaderView descendant
self.setHeader(DiceHeaders())
有任何想法吗?
解决方案
我发现了setContextMenupolicy函数:
self.header().setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
self.header().customContextMenuRequested.connect(self.headerMenu)
然后,在Headermenu中:
def headerMenu(self, pos):
globalPos = self.mapToGlobal(pos)
menu = QMenu()
menu.addAction("test item")
selectedItem = menu.exec_(globalPos)
if selectedItem:
print "selected: ", selectedItem
其他提示
我会选择解决方案n°2:写下自己的类sentar qheaderview。您的细分故障可能来自python/pyqt故障?您应该确保通过对其进行引用来确保存在对象。
不隶属于 StackOverflow