首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >右键单击QTreeView内部的QHeaderView

右键单击QTreeView内部的QHeaderView
EN

Stack Overflow用户
提问于 2010-04-20 15:27:39
回答 2查看 4.2K关注 0票数 2

我已经编写了一个具有多个列的QTreeView的后代。我想创建一个弹出式菜单,当用户右击列标题时会出现该菜单。为此,我尝试过从QTreeView捕获信号,但QTreeView似乎不会在报头上发出信号。QTreeView.header()就是这样。因此,我认为我必须:

1:将QHeaderView的一个信号连接到弹出函数-我一直找不到一个在单击鼠标右键时触发的信号-我尝试过sectionClicked,sectionHandleDoubleClicked,sectionDoubleClicked,sectionPressed (并不奇怪双击函数没有捕捉到一次右键单击-但它们确实捕捉到了双击)

代码语言:javascript
复制
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后代。我一直在运行时得到一个分段错误,没有更多的解释。

代码语言:javascript
复制
#in DiceView's init, where DiceHeaders is the QHeaderView descendant
self.setHeader(DiceHeaders())

有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-04-21 07:40:57

我发现了setContextMenuPolicy函数:

代码语言:javascript
复制
self.header().setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
self.header().customContextMenuRequested.connect(self.headerMenu)

然后,在headerMenu中:

代码语言:javascript
复制
def headerMenu(self, pos):
    globalPos = self.mapToGlobal(pos)
    menu = QMenu()
    menu.addAction("test item")
    selectedItem = menu.exec_(globalPos)
    if selectedItem:
        print "selected: ", selectedItem
票数 5
EN

Stack Overflow用户

发布于 2010-04-21 14:19:21

我选择了n°2的解决方案:编写继承QHeaderView的类。您的分段故障可能来自python/pyqt故障?您应该通过保留对DiceHeaders对象的引用来确保它存在。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2673326

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档