pyqt4 の widget に マウスなイベントハンドラを追加する
qt では QLineEdit などの QWidget に デフォルトではマウスなイベントハンドラがないらしい。なので、clicked, pressed, released などを connect しても無反応です。もし、デフォルトの QWidget にマウスなイベントハンドラーを追加したい場合は、本家 ML に Widget のサブクラスを作ってフックしろとあった。
from PyQt4 import QtCore, QtGui
class QLineEdit(QtGui.QLineEdit):
def __init__(self, parent=None):
QtGui.QLineEdit.__init__(self, parent)
def mousePressEvent(self, event):
self.emit(QtCore.SIGNAL("pressed()"))
def mouseReleaseEvent(self, event):
self.emit(QtCore.SIGNAL("clicked()"))
self.emit(QtCore.SIGNAL("released()"))
乱暴ですが、上記のコードでデフォルトのイベントをハンドリングできます。 clicked については Press と Release を両方フックする必要があると書いてありましたけど、いつどこで押されて、何秒以内に離されたかとか厳密に制御されたい型は実装しちゃってください(笑
他にも Qt では、デフォルトのイベントで渡ってくる情報が少なかったりするので、サブクラスでフックしちゃってます。
コメント
コメントを投稿