我已经写了一个带有多列的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故障?您应该确保通过对其进行引用来确保存在对象。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top