PyQt4中的textChanged事件未触发

4
为什么每当我在QLineEdit中输入数据时,textChanged事件都不会触发?
from PyQt4.Qt import Qt, QObject,QLineEdit
from PyQt4.QtCore import pyqtSlot,SIGNAL,SLOT
from PyQt4 import QtGui, QtCore

import sys


class DirLineEdit(QLineEdit, QtCore.QObject):
"""docstring for DirLineEdit"""

@pyqtSlot(QtCore.QString)
def textChanged(self, string):
        QtGui.QMessageBox.information(self,"Hello!","Current String is:\n"+string)  

def __init__(self):
    super(DirLineEdit, self).__init__()

    self.connect(self,SIGNAL("textChanged(QString&)"),
                self,SLOT("textChanged(QString *)"))


app = QtGui.QApplication(sys.argv)
smObj = DirLineEdit()

smObj.show()

app.exec_()

我觉得一切都是正确的,但我错过了什么吗?

1个回答

8

请替换以下行:

self.connect(self,SIGNAL("textChanged(QString&)"),
            self,SLOT("textChanged(QString *)"))

使用:

self.connect(self,SIGNAL("textChanged(QString)"),
            self,SLOT("textChanged(QString)"))

或者您可以使用 self.textChanged.connect (处理程序的名称应更名,因为名称冲突):

class DirLineEdit(QLineEdit, QtCore.QObject):

    def on_text_changed(self, string):
            QtGui.QMessageBox.information(self,"Hello!","Current String is:\n"+string)  

    def __init__(self):
        super(DirLineEdit, self).__init__()
        self.textChanged.connect(self.on_text_changed)

3
哎呀,我已经让它像这样工作了 self.textChanged.connect(self.on_text_changed) - Ciasto piekarz
@san 您的评论应该成为被采纳的答案!同时也点赞 +1 给:"或者您可以使用 self.textChanged.connect",虽然它不够完整,但是仍然有用。 - Nras
self.lineEdit.connect(self.lineEdit,QtCore.SIGNAL("menu()"), self.lineEdit,QtCore.SLOT("menu()")) 会引发“Object::connect: No such slot QLineEdit::menu()”错误。 - Hilal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接