2014-02-20 3 views
1

나는 QLineEdit을 가지고 있는데, QLineEdit에서 마우스를 움직일 수있는 신호가 있는지 알아야합니다. 그리고 QLineEdit 위에 마우스가 있으면 신호를 내 보냅니다.QLineEdit 마우스 오버 신호 - 마우스가 QLineEdit 위에있을 때

나는 문서를 볼 수, 우리는 (다음 신호

cursorPositionChanged (INT 이전, INT 신규)
editingFinished()
returnPressed()
에서 selectionChanged()
의 TextChanged을 발견했다 const QString & 텍스트)
textEdited (const QString & 텍스트)

그러나이 중 아무 것도 마우스 오버 전용입니다. PyQt4에서 다른 방법으로이 작업을 수행 할 수 있다고 제안 할 수 있습니까?

답변

2

QLineEdit에 내장 마우스 호버 신호가 없습니다.

그러나 event-filter을 설치하면 비슷한 것을 쉽게 달성 할 수 있습니다. 이 기술은 모든 유형의 위젯에서 작동하며, 사용자가해야 할 수도있는 유일한 일은 set mouse tracking입니다 (QLineEdit의 경우 기본적으로 켜져있는 것처럼 보이지만).

from PyQt4 import QtCore, QtGui 

class Window(QtGui.QWidget): 
    def __init__(self): 
     QtGui.QWidget.__init__(self) 
     self.edit = QtGui.QLineEdit(self) 
     self.edit.installEventFilter(self) 
     layout = QtGui.QVBoxLayout(self) 
     layout.addWidget(self.edit) 

    def eventFilter(self, source, event): 
     if source is self.edit: 
      if event.type() == QtCore.QEvent.MouseMove: 
       pos = event.globalPos() 
       print('pos: %d, %d' % (pos.x(), pos.y())) 
      elif event.type() == QtCore.QEvent.Enter: 
       print('ENTER') 
      elif event.type() == QtCore.QEvent.Leave: 
       print('LEAVE') 
     return QtGui.QWidget.eventFilter(self, source, event) 

if __name__ == '__main__': 

    import sys 
    app = QtGui.QApplication(sys.argv) 
    window = Window() 
    window.setGeometry(500, 300, 300, 100) 
    window.show() 
    sys.exit(app.exec_()) 
+0

감사를 ekhumoro :

아래의 데모 스크립트

는 다양한 마우스 이동 이벤트를 추적하는 방법을 보여줍니다. 그것은 완벽하게 작동합니다 :) –

0

enterEvent, leaveEvent을 사용할 수 있습니다. 마우스가 위젯을 입력하면 enterEvent가 트리거되고 마우스가 위젯을 나갈 때 이탈 이벤트가 트리거됩니다. 이러한 이벤트는 QWidget 클래스에 있으며 QLineEditQWidget을 상속하므로 QLineEdit에서 이러한 이벤트를 사용할 수 있습니다. 나는 이러한 이벤트를 QLineEdit의 문서에서 보지 못하며 링크 상속 된 멤버를 포함한 모든 멤버의 목록 페이지 상단에 있습니다.

관련 문제