QLineEdit悬停信号 - 当鼠标悬停在QlineEdit上时

时间:2014-02-20 06:14:12

标签: python-2.7 pyqt4 mouseover qlineedit

我有QLineEdit,我需要知道是否有信号可以跟踪鼠标悬停在QLineEdit上方,一旦鼠标悬停在QLineEdit上,它就会发出信号

我看过这些文件,发现我们有以下信号:

  

cursorPositionChanged(int old,int new)
  editingFinished()
  returnPressed()
  selectionChanged()
  textChanged(const QString& text)
  textEdited(const QString& text)

但是,这一切都不是为了悬停。你能否建议在PyQt4中以其他方式做到这一点?

2 个答案:

答案 0 :(得分: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_())

答案 1 :(得分:1)

您可以使用enterEventleaveEvent,当鼠标进入窗口小部件时会触发enterEvent,当鼠标离开窗口小部件时会触发离开事件。这些事件位于QWidget类,QLineEdit继承QWidget,因此您可以在QLineEdit中使用这些事件。我在QLineEdit的文档中没有看到这些事件,请点击页面顶部的所有成员列表,包括继承的成员