繁体   English   中英

两种不同类别的信号和插槽

[英]Signals and slots in two different classes

我正在学习信号和插槽,对此情况感到困惑。

上下文:我在ClassA中有一个方法,该方法需要(从工作线程中)向ClassB(在主线程中)发出信号。 工作线程执行一些繁重的处理,而主线程更新UI中的进度条。 我需要工作线程将信号传递到主线程以更新UI。

我不确定如何在两个不同的类之间传递信号。 现在,我让第一类实例化一个信号对象(Communicate),将其连接到第二类中的方法,然后在准备好时发出。 这导致段错误,所以很明显我在做错事。

我有以下信号类:

class Communicate(QtCore.QObject):

    update_progress = QtCore.Signal()

这是ClassA中的方法,辅助线程:

def methodInClassA(self, filename):

    c = Communicate()
    c.update_progress.connect(ClassB.set_progress) 

    print "emitting"
    c.update_progress.emit()

    ...

这是ClassB中的方法,该方法用于更新UI中的进度条:

class ClassB(QtGui.QDialog, classB.Ui_Dialog):

    def __init__(self, parent=None):

        super(ClassB, self).__init__(parent)
        self.setupUi(self)


    def set_progress(self):

        print "RECEIVED"    
        sender = self.sender()
        self.progressBar.setValue(100)  

您正在将c.update_progress连接到ClassB.set_progress,这是一种未绑定的方法。 这在PySide中不起作用,我很确定在PyQt中也将不起作用。 您需要有一个ClassB 实例 ,并将c.update_progress连接到其设置的进度方法,例如c.update_progress.connect(i_am_b.set_progress)

i_am_b必须已在其他地方实例化。 您需要谨慎设置i_am_b和A实例的线程亲和性,然后再调用它。 请参阅QObject.moveToThread的文档。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM