QShortcut的context问题

今天我制作的文件树界面有两个控件。一曰QLineEdit,二曰QTreeView。
在QTreeView中设置了一个Enter(Return)快捷键,用来打开文件。有关TreeView的代码示意如下:

class MyTreeView(QTreeView)
	def __init__(self)
		......(前面代码省略)
		
        self.rename_shortcut = QShortcut(QKeySequence('F2'), self)
        self.copy_shortcut = QShortcut(QKeySequence.Copy, self)
        self.paste_shortcut = QShortcut(QKeySequence.Paste, self)
        self.delete_shortcut = QShortcut(QKeySequence('Delete'), self)
        self.open_shortcut = QShortcut(QKeySequence('Return'), self)
        self.open_shortcut.setContext(Qt.WidgetShortcut)
        self.goto_parent_path_shortcut = QShortcut(QKeySequence('Backspace'), self)

效果如图:
QShortcut的context问题_第1张图片
可见上面有个QLineEdit。
结果发现问题:QLineEdit的returnPressed信号不管用了!

解决问题。

查阅资料发现,这可能是设置TreeView的快捷键遇到的问题。

查找文档发现,TreeView的默认Value=1,亦即WindowShortCut。意思就是说,当这个快捷键的父控件——也就是Treeview——的父控件被激活时,快捷键将生效。

换句话说,由于这里的TreeView和LineEdit是同级控件,所以当LineEdit被选中的时候,TreeView的快捷键就会被激活。这样的话,LineEdit的回车键就被拦截了!

由此,使用调用QShortcut.setContext,值为Qt.WidgetShortcut即可。这样只有TreeView获得焦点的时候,快捷键才会生效。

参考下表。如需要中文翻译,请看这个帖子:
中文翻译:QShortcut

QShortcut的context问题_第2张图片

你可能感兴趣的:(python,Pyqt,PySide2)