首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过QtCore.SignalMapper调用插槽

通过QtCore.SignalMapper调用插槽
EN

Stack Overflow用户
提问于 2014-03-24 15:17:08
回答 1查看 247关注 0票数 1

我想通过不同参数的相同函数检查多个QtGui.QLineEdits中的用户输入。我试过QtCore.SignalMapper。这是我在测试应用程序中的代码:

代码语言:javascript
复制
    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信号连接到插槽的工作原理是:

代码语言:javascript
复制
    QtCore.QObject.connect(self.lineEdit_331, QtCore.SIGNAL(_fromUtf8("returnPressed()")), self.test_1)

我的密码怎么了?谢谢你的帮助

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-28 02:48:11

代码的主要错误在于,您正在使用难看的、容易出错的、老式的语法来连接信号,而不是使用新型语法

下面是您的示例代码的重写:

代码语言:javascript
复制
    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)

如果您想知道原始代码为什么不能工作,那是因为您应该在前两个连接中使用插槽。它应该是:

代码语言:javascript
复制
    QtCore.QObject.connect(
        self.lineEdit_331, QtCore.SIGNAL('returnPressed()'),
        self.signalMapper, QtCore.SLOT('map()'))

这是因为有两个重载的QSignalMapper.map,所以您需要指定要使用哪一个。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22613409

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档