QProcess完成信号参数lambda函数

QProcess finished signal parameters lambda function

我不熟悉在 qprocess 信号槽环境中处理 lambda 函数。我对函数的参数有疑问。特别是 finished() 信号。根据文档,它接受两个参数:def finished (exitCode, exitStatus)

我正在尝试像这样:

for i, thing in enumerate(something):
    self.proc_codificar.append(Qprocess())
    #(code here)
    self.proc_codificar[i].finished.connect(lambda exitCode, exitStatus, proc=self.proc_codificar[i]: self.codificar_fin(exitCode, exitStatus, proc))
    #(code here)

在进程完成时,我想知道 exitCode、exitStatus 和进程本身

def self.proc_codificar(self, exitCode, exitStatus, proc)
    print(exitCode)
    print(exitStatus)
    print(proc)

但是这种方式行不通。处理 lambda 函数的正确方法是什么?

PySide2 中 QProcess 的完成信号过载,因此有 2 个签名(参见 docs):

  • PySide2.QtCore.QProcess.finished(exitCode, exitStatus)

  • PySide2.QtCore.QProcess.finished(exitCode)

注意:第二种方法已被标记为已弃用,因此在下一个版本中可能会被淘汰。

鉴于以上情况,您必须在连接中注明签名:

for i, thing in enumerate(something):
    process = QProcess()
    # (code here)
    process.finished[int, QProcess.ExitStatus].connect(
        lambda exitCode, exitStatus, proc=process: self.codificar_fin(
            exitCode, exitStatus, proc
        )
    )
    # (code here)
    self.proc_codificar.append(process)

注意:在 PyQt5 和 Qt/C++ 中不会发生这种情况。