我已经编写了一个具有多个列的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的后代,并将其用于我的headers。到目前为止,我还没有成功地将新的header类连接到QTreeView后代。我一直在运行时得到一个分段错误,没有更多的解释。
#in DiceView's init, where DiceHeaders is the QHeaderView descendant
self.setHeader(DiceHeaders())有什么想法吗?
发布于 2010-04-21 07:40:57
我发现了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发布于 2010-04-21 14:19:21
我选择了n°2的解决方案:编写继承QHeaderView的类。您的分段故障可能来自python/pyqt故障?您应该通过保留对DiceHeaders对象的引用来确保它存在。
https://stackoverflow.com/questions/2673326
复制相似问题