Python 基于对象的QSignalMapper出现问题
我正试图在PyQt中设置一个信号槽安排,在那里信号传输大量信息。我想通过将要传输的各种信息设置为Python 基于对象的QSignalMapper出现问题,python,qt,pyqt,signals-slots,qsignalmapper,Python,Qt,Pyqt,Signals Slots,Qsignalmapper,我正试图在PyQt中设置一个信号槽安排,在那里信号传输大量信息。我想通过将要传输的各种信息设置为QObject的属性,将QObject用作载体。从理论上讲,这应该是可行的-有一个QSignalMapper.setMapping()重载,它将发送方和QObject作为参数 以下是简化代码: self.mapper = QtCore.QSignalMapper() self.timeline.finished.connect(self.mapper.map) carrier = QtCore.QOb
QObject
的属性,将QObject
用作载体。从理论上讲,这应该是可行的-有一个QSignalMapper.setMapping()
重载,它将发送方和QObject
作为参数
以下是简化代码:
self.mapper = QtCore.QSignalMapper()
self.timeline.finished.connect(self.mapper.map)
carrier = QtCore.QObject()
carrier.contents = (item1, item2)
self.mapper.setMapping(self.timeline, carrier)
self.portalMapper.mapped.connect(self.report)
def report(self, carrierObject):
print 'Triggered'
不幸的是,它不起作用。我已经通过消除过程将问题追溯到setMapping
函数
如果我用int
关闭QObject
,同样的方案也能正常工作。它与我添加到QObject
的属性也没有任何关系-使用新的开箱即用QObject
会导致相同的问题
似乎在这里发生了一些事情,
setMapping
函数的这个特定重载。关于这里的问题有什么想法吗?感谢@ekhumaro的建议,完全跳过QSignalMapper方法,只创建一个自定义信号。工作起来很有魅力。使用QSignalMapper
没有任何价值。只需定义一个自定义信号并直接发送数据。我不确定如何做到这一点,@ekhumoro。。。我的代码正在等待的信号是Qt标准QTimeline.finished
,并且必须是,因为我正在等待计时器结束,然后才能继续下一步。我可以将finished()
信号连接到一个函数,该函数依次发送一个自定义信号。。。但这不是简单地概括了QSignalMapper的用途吗?接收一个信号,然后用一个新参数发送一个新信号?当然,但它做得更简单。但是,您的代码真的需要发送信号吗?在您的示例中,信号只有一个消费者(self
),因此发出信号似乎是完全冗余的。您所做的只是发送一个指向对象的指针,而不是数据本身(也就是说,任何东西都不会被复制)。您还可以保留对数据本身的引用作为self
的属性,然后直接在连接到finished
信号的插槽中访问该引用。