在QTableWidget中右键单击获取表头列

6
我有一个 QTableWidget,其中有一些列只是复选框(而有些不是)。我正在尝试实现一个功能,使得当用户右键单击与“仅复选框”列相关的标题项时,他们可以选择“取消所有”或“全选”。
到目前为止,我已经通过以下信号实现了 customContextMenu:
self.headers = self.tblData.horizontalHeader()
self.headers.setContextMenuPolicy(Qt.CustomContextMenu)
self.headers.customContextMenuRequested.connect(self.show_header_context_menu)
self.headers.setSelectionMode(QAbstractItemView.SingleSelection)

这将导致以下上下文菜单调用:

def show_header_context_menu(self, position):
    menu = QMenu()
    deselect = menu.addAction("Clear Checked")
    ac = menu.exec_(self.tblData.mapToGlobal(position))
    if ac == deselect:
        pass
        #Actually do stuff here, of course

这会弹出一个上下文菜单,但我找不到任何方法来获取右键单击的标题的索引,我尝试过self.headers.selectedIndexes()self.headers.currentIndex(),但这些似乎只与实际表格选择有关,而不是标题。
一旦我成功获得了右键单击的标题索引,我就可以很容易地限制菜单仅在选择正确的索引时显示(那些只有复选框的列),所以这真的是另外一件事情。
我错过了什么?感谢您提前的帮助。
2个回答

6
< p> customContextMenuRequested 信号发送上下文菜单事件的位置,作为 QPoint 。方便地,表格标题有一个可以直接利用它的超载的logicalIndexAt,所以您只需执行以下操作:

def show_header_context_menu(self, position):
    column = self.headers.logicalIndexAt(position)

太好了,我知道我漏掉了什么!非常感谢! - wklumpen

1

我看到你正在使用Python,但我认为这仍然可以工作。

尝试创建一个QHeaderView派生类,并尝试覆盖其行为。

void QHeaderView::mousePressEvent ( QMouseEvent * e )

要获取鼠标右键事件,请使用

int QHeaderView::logicalIndexAt ( int x, int y ) const

获取右键单击的列的逻辑索引。最后显示您的上下文菜单。

请参见http://doc.qt.nokia.com/4.7-snapshot/qheaderview.html


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接