PyQt4 to PyQt5 migration
在过去的几天里,我读了很多关于新的和旧的信号和时隙的文章。现在似乎更容易了,但我坚持在一个问题上。
在我的项目中,旧代码根据传递给它的名称生成动态信号。
例子:
1 | self.netlink.connect(self.netlink,SIGNAL(self.modelName +"_gotCommand"),self.processCommand) |
这里是Emit
1 | self.emit(SIGNAL(model +"_gotCommand"), cmd, data) |
号
根据模型,数据可以是diffrenet类型(list、tuple、string等)。
所以我如何将这个代码移动到qt5中,因为我们需要用
不能使用新的语法动态地发出任意信号。所有信号必须在类中预先定义。
您的示例并不清楚为什么需要为每个模型使用不同的信号名称,因为您总是连接到同一个插槽。让每个模型发出相同的信号似乎更有意义,如果需要,也可以发送模型名称:
1 2 3 4 5 6 7 8 9 10 | class SomeModel(QObject): gotCommand = pyqtSignal(str, str, object) def doSomething(self): ... self.gotCommand.emit(model, cmd, data) ... self.netlink.gotCommand.connect(self.processCommand) |
但如果仍需按键连接/发射信号,则可以使用getattr:
1 | getattr(self.netlink, self.modelName +"_gotCommand")).connect(self.processCommand) |
号
还有:
1 | getattr(self, model +"_gotCommand").emit(cmd, data) |