tay*_*ron 2 python qt pyqt qtreeview qheaderview
我已经编写了多列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)
Run Code Online (Sandbox Code Playgroud)
或者,
2:使用我自己的MousePressEvent函数编写QHeaderView的后代,并将其用作我的标题。到目前为止,在将新的标头类连接到QTreeView后代方面,我一直没有成功。我在运行时不断遇到Segmentation Fault,没有更多解释。
#in DiceView's init, where DiceHeaders is the QHeaderView descendant
self.setHeader(DiceHeaders())
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我发现了setContextMenuPolicy函数:
self.header().setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
self.header().customContextMenuRequested.connect(self.headerMenu)
Run Code Online (Sandbox Code Playgroud)
然后,在headerMenu中:
def headerMenu(self, pos):
globalPos = self.mapToGlobal(pos)
menu = QMenu()
menu.addAction("test item")
selectedItem = menu.exec_(globalPos)
if selectedItem:
print "selected: ", selectedItem
Run Code Online (Sandbox Code Playgroud)