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_())