PyQt4到PyQt5的迁移

时间:2017-06-08 08:50:13

标签: pyqt pyqt4 pyqt5

在最后几天,我读了很多关于新旧信号和插槽的内容。现在看起来更容易,但我坚持一个问题。

在我的项目中,旧代码根据传递给它的名称生成动态信号。

示例:

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) 定义描述每个信号。

1 个答案:

答案 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)