gpt4 book ai didi

python - Qt 5.4 Python 中的 Ctrl+Z 快捷键冲突?在按下按钮之前不起作用

转载 作者:太空宇宙 更新时间:2023-11-04 03:36:22 24 4
gpt4 key购买 nike

在 Qt Designer 5.4 中,我有一个 QPushButton 并将其快捷方式设置为 Ctrl+Z。我正在使用 pyuic5 将其转换为 Python 代码。这是 Python 代码中的结果行:

self.quickTextUndoButton.setShortcut(_translate("newEntryDialog", "Ctrl+Z"))

当运行应用程序时,按下 Ctrl+Z 不会按预期调用插槽,直到按下 QPushButton(它会调用插槽);此后,按 Ctrl+Z 确实会按预期调用插槽。

使用快捷方式 F1F12 的其他按钮不会发生这种“初始化”行为。

这是否与 Ctrl+Z 的现有解释冲突?如果是这样,是否有一种简单的方法可以避免这种冲突?也许只是适本地设置 ShortcutContext?

最佳答案

单击该按钮将为其提供键盘焦点,更重要的是,它会从具有相同快捷方式集的任何其他小部件上移除焦点。

所有可编辑的输入小部件(例如QLineEditQTextEdit 等)都有硬编码default key bindings用于各种操作,包括 Ctrl+Z(撤消上一个操作)。如果此类小部件具有键盘焦点,则其快捷方式将优先于您为按钮设置的快捷方式(反之亦然)。

当多个小部件具有相同的快捷方式时,您可以设置一个事件过滤器并使用 ShortcutOverride 来消除它们的歧义:

    self.lineEdit.installEventFilter(self)
...

def eventFilter(self, source, event):
if (event.type() == QtCore.QEvent.ShortcutOverride and
event.modifiers() == QtCore.Qt.ControlModifier and
event.key() == QtCore.Qt.Key_Z):
# eat the shortcut on the line-edit
return True
return super(Window, self).eventFilter(source, event)

但是,作为用户,我真的讨厌做这种事情的应用程序。当我使用标准输入小部件时,我希望能够使用所有标准键盘绑定(bind)。如果它们没有按预期工作,它看起来就像是一个错误。

关于python - Qt 5.4 Python 中的 Ctrl+Z 快捷键冲突?在按下按钮之前不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28862150/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com