3

Qt と Mac OS X について基本的な質問があります。以下のようにQMainWindowクラスを定義し、keyPressEvent関数を定義すると、キーが押されたときにこの関数に入るはずがありませんMyWindowか? 特定のウィジェット (リスト ビューまたは編集ボックス) がフォーカスされている場合、キープレス イベントを取得できませんが、少なくともボタンにフォーカスしてからキーを押すと取得できます。Mac OS XI では、まったく応答がありません。

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

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

何か案は?

(PySide で Python を使用)

[編集] 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_())
4

1 に答える 1