单击QColumnView行中的项目以触发不同的上下文菜单

时间:2016-02-04 09:07:59

标签: python qt contextmenu pyside

我想知道如何在项目旁边处理鼠标右键,即使在同一行上也是如此。

描述

类似于Windows资源管理器的行为方式,当您没有右键单击文件的名称但在其旁边的白色区域时(即使在之间的白色区域) >详细信息视图中的名称和例如 size )它会为您提供"文件夹"上下文菜单而不是"文件"上下文菜单。

实施

我希望在QColumnView中实现此上下文菜单功能。此视图中的列实际上是 QListView 小部件。因此,它可能与QListView的行为方式有关。

这就是我现在所拥有的:

model = QtGui.QFileSystemModel()
view = QtGui.QColumnView()
view.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
view.customContextMenuRequested.connect(contextMenu)

使用这样的上下文菜单:

def contextMenu(point):
    index = view.indexAt(point)
    is_selection = index.isValid()
    if not is_selection:
        # Not a valid item. Let's check what "column" we're in
        # This is our "folder" context
        child = view.childAt(point)
        listView = child.parentWidget()
        index = listView.rootIndex()

    path = model.filePath(index)

    # Create the menu
    menu = QtGui.QMenu()   
    if is_selection:
        # An item was selected (file context menu)
        menu.addAction("Explore file...")
    else:
        # An item was not selected (folder context menu)
        menu.addAction("Explore folder...")

    # Show the menu
    globalPoint = self.browserView.mapToGlobal(point)
    action = menu.exec_(globalPoint)

这里的问题点击整行的任何地方都会被视为"作为项目" 。我正在寻找的是点击没有文字/图标的区域不应被视为项目

有趣的是,这张图片大致显示了我的意思:

QColumnView

此处的蓝色选择栏不会跨越视图中的整个行。那个蓝色区域是我想要找到的。运行我的界面会以某种方式触发整行上的选择,而不仅仅是标签/图标的大小。

所以右键单击地址旁边的右侧会触发"文件夹"功能而不是"文件"功能。

0 个答案:

没有答案