我想通过具有不同参数的相同函数检查几个QtGui.QLineEdits中的用户输入。我试过QtCore.SignalMapper。这是我在测试应用程序中的代码:
self.signalMapper = QtCore.QSignalMapper(self)
QtCore.QObject.connect(self.lineEdit_331, QtCore.SIGNAL(_fromUtf8('returnPressed()')), self.signalMapper.map)
QtCore.QObject.connect(self.lineEdit_341, QtCore.SIGNAL(_fromUtf8("returnPressed()")), self.signalMapper.map)
self.signalMapper.setMapping(self.lineEdit_331,'links')
self.signalMapper.setMapping(self.lineEdit_341,'rechts')
QtCore.QObject.connect(self.signalMapper, QtCore.SIGNAL(_fromUtf8("mapped(QString)")),self.test)
signalMapper存在且所有连接都返回'True'但没有调用插槽(在更改'connect'和'setMapping'的顺序后相同)。 将lineEdits信号连接到插槽工作:
QtCore.QObject.connect(self.lineEdit_331, QtCore.SIGNAL(_fromUtf8("returnPressed()")), self.test_1)
我的代码有什么问题?谢谢你的帮助
答案 0 :(得分:1)
您的代码的主要问题是您使用丑陋,容易出错的旧式语法来连接信号,而不是new-style syntax。
以下是您的示例代码的重写:
self.signalMapper = QtCore.QSignalMapper(self)
self.lineEdit_331.returnPressed.connect(self.signalMapper.map)
self.lineEdit_331.returnPressed.connect(self.signalMapper.map)
self.signalMapper.setMapping(self.lineEdit_331, 'links')
self.signalMapper.setMapping(self.lineEdit_341, 'rechts')
self.signalMapper.mapped[str].connect(self.test)
如果您对原始代码无法正常工作感到好奇,那是因为您应该在前两个连接中使用SLOT。应该是:
QtCore.QObject.connect(
self.lineEdit_331, QtCore.SIGNAL('returnPressed()'),
self.signalMapper, QtCore.SLOT('map()'))
这是因为QSignalMapper.map有两个重载,所以你需要指定你打算使用哪一个。