QShortcut的context问题

10 篇文章 3 订阅
1 篇文章 0 订阅

今天我制作的文件树界面有两个控件。一曰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)

效果如图:
在这里插入图片描述
可见上面有个QLineEdit。
结果发现问题:QLineEdit的returnPressed信号不管用了!

解决问题。

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

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

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

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

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

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值