我想知道如何在项目旁边处理鼠标右键,即使在同一行上也是如此。
类似于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)
这里的问题是点击整行的任何地方都会被视为"作为项目" 。我正在寻找的是点击没有文字/图标的区域不应被视为项目。
有趣的是,这张图片大致显示了我的意思:
此处的蓝色选择栏不会跨越视图中的整个行。那个蓝色区域是我想要找到的。运行我的界面会以某种方式触发整行上的选择,而不仅仅是标签/图标的大小。
所以右键单击地址旁边的右侧会触发"文件夹"功能而不是"文件"功能。