PyQt4 到 PyQt5 迁移

问题描述 投票:0回答:1

在过去的几天里,我读了很多关于新旧类型的信号和槽的文章。现在看来更容易了,但我坚持了一个问题。

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

示例:

self.netlink.connect(self.netlink,SIGNAL(self.modelName + "_gotCommand"),self.processCommand)

这里是发射

self.emit(SIGNAL(model + "_gotCommand"), cmd, data)

数据可以是基于模型的不同类型(列表、元组、字符串等)

那么我怎样才能将这段代码移动到 Qt5 中,因为我们需要用

pyqtSignal
定义来描述每个信号。

pyqt pyqt5 pyqt4 signals-slots
1个回答
1
投票

不可能使用新式语法动态发出任意信号。所有信号都必须在类中预先定义。

您的示例并未清楚说明为什么您需要为每个模型使用不同的信号名称,因为您始终连接到同一个插槽。让每个模型发出相同的信号似乎更有意义,如果有必要,也许还可以发送模型名称:

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)
© www.soinside.com 2019 - 2024. All rights reserved.