在最后几天,我读了很多关于新旧信号和插槽的内容。现在看起来更容易,但我坚持一个问题。
在我的项目中,旧代码根据传递给它的名称生成动态信号。
示例:
SELECT Aux.Field1, Aux.Field2, Aux.Field3
INTO #tmpTbl
FROM ( SELECT TOP 1 Field1, Field2, Field3 FROM OneTable ) Aux
这里是发射
self.netlink.connect(self.netlink,SIGNAL(self.modelName + "_gotCommand"),self.processCommand)
数据可以再次基于模型
进行diffrenet类型(列表,元组,字符串等)那么如何将此代码移动到Qt5中,因为我们需要用self.emit(SIGNAL(model + "_gotCommand"), cmd, data)
定义描述每个信号。
答案 0 :(得分:0)
使用新式语法无法动态发出任意信号。所有信号必须在课堂上预先定义。
您的示例并不清楚为什么您需要为每个型号使用不同的信号名称,因为您始终连接到同一个插槽。让每个模型发出相同的信号似乎更有意义,如有必要,可能还会发送模型名称:
class SomeModel(QObject):
gotCommand = pyqtSignal(str, str, object)
def doSomething(self):
...
self.gotCommand.emit(model, cmd, data)
...
self.netlink.gotCommand.connect(self.processCommand)
但是如果你仍然需要按键连接/发出信号,你可以使用getattr:
getattr(self.netlink, self.modelName + "_gotCommand")).connect(self.processCommand)
和
getattr(self, model + "_gotCommand").emit(cmd, data)