2014-02-20 57 views
1

我有一個QLineEdit,我需要知道是否有一個信號可以跟蹤鼠標懸停在該QLineEdit上,一旦鼠標結束,該QLineEdit它發出一個信號。QLineEdit懸停信號 - 當鼠標懸停在QlineEdit

我所看到的文件,發現我們有以下信號

cursorPositionChanged(INT老,詮釋新)
editingFinished()
returnPressed()
的SelectionChanged()
框TextChanged( const QString & text)
textEdited(const QString & text)

但是,這些都不是徘徊。你可以建議,如果這可以通過任何其他方式在PyQt4中完成?

回答

2

QLineEdit沒有內置的鼠標懸停信號。

但是,通過安裝event-filter可以非常容易地實現類似的目的。這種技術適用於任何類型的小部件,您可能需要做的唯一的其他事情就是set mouse tracking(儘管QLineEdit默認情況下會啓用此功能)。

下面的演示腳本顯示瞭如何跟蹤各種鼠標移動事件:ekhumoro

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

感謝。它完美的作品:) –

0

您可以使用enterEvent,leaveEvent,當鼠標進入窗口小部件時會觸發enterEvent,並且當鼠標離開窗口小部件時觸發離開事件。這些事件在QWidget類中,QLineEdit繼承QWidget,因此您可以在QLineEdit中使用這些事件。我沒有在QLineEdit的文檔中看到這些事件,請點擊鏈接所有成員的列表,包括頁面頂部的繼承成員