【问题标题】:OS X + Qt: How to capture all key-press events in the entire GUI?OS X + Qt:如何捕获整个 GUI 中的所有按键事件?
【发布时间】:2013-10-07 22:52:58
【问题描述】:

我有一个关于 Qt 和 Mac OS X 的基本问题。如果我定义了一个 QMainWindow 类并定义了一个 keyPressEvent 函数,如下所示,是否只要在 @ 987654323@?我在 Linux 下遇到了一些问题,如果某些小部件被关注(列表视图或编辑框),我不会得到按键事件,但至少如果我关注一个按钮然后按下一个键,我会得到它。在 Mac OS X 下,我根本没有得到任何响应。

class MyWindow(QMainWindow):    
    def keyPressEvent(self, event):
        key = event.key()

        if key == Qt.Key_F:
            print("pressed F key")

有什么想法吗?

(使用 Python 和 PySide)

[编辑] 基于 Pavels 答案的解决方案:

import sys
from PySide.QtGui import *
from PySide.QtCore import * 


class basicWindow(QMainWindow):  

    def __init__(self):
        QMainWindow.__init__(self)

        self.edit = QLineEdit("try to type F", self)

        self.eF = filterObj(self)
        self.installEventFilter(self.eF)
        self.edit.installEventFilter(self.eF)
        self.show()

    def test(self, obj):
        print "received event", obj

class filterObj(QObject):
    def __init__(self, windowObj):
        QObject.__init__(self)
        self.windowObj = windowObj

    def eventFilter(self, obj, event):
        if (event.type() == QEvent.KeyPress):
            key = event.key()


            if(event.modifiers() == Qt.ControlModifier):
                if(key == Qt.Key_S):
                    print('standard response')

            else:                    
                if key == Qt.Key_F:
                    self.windowObj.test(obj)

            return True
        else:
            return False          


if __name__ == "__main__":
    app = QApplication(sys.argv)

    w = basicWindow()

    sys.exit(app.exec_())

【问题讨论】:

    标签: python macos qt pyside


    【解决方案1】:

    当小部件(例如编辑框)使用事件时,它通常不会传播到其父小部件,因此您无法从父窗口获取这些事件。您应该在主要的QApplication 对象上安装一个事件过滤器。这样您将接收(并根据需要过滤)所有事件。

    Event filters

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-23
      • 2015-04-09
      • 2017-01-01
      • 2021-09-21
      • 2016-08-23
      • 1970-01-01
      相关资源
      最近更新 更多