如何通过单击 QProgressDialog 的取消按钮来取消 QProcess?

Posted

技术标签:

【中文标题】如何通过单击 QProgressDialog 的取消按钮来取消 QProcess?【英文标题】:How to cancel QProcess by clicking in QProgressDialog's cancel button? 【发布时间】:2014-10-15 15:37:39 【问题描述】:

编辑:

请向下滚动查看新问题。这是原文:

我有以下代码:

self.progress = QtGui.QProgressDialog("Running",  "Cancel", 0, 0)   
self.progress.show()
command = "./some_script.exe"
args =  [ "some", "args"]
process = QtCore.QProcess(self)
process.start(command, args)
self.progress.close()

当我运行它时,进度对话框在启动 QProcess 后立即关闭。在 QProcess 完成之前如何保持它运行?

非常感谢

编辑:

已解决:我必须将完成的信号连接到关闭进度对话框的函数:

QtCore.QObject.connect(self.process,QtCore.SIGNAL("finished(int)"),self.processCompleted)

然后:

def processCompleted(self):
    self.progress.close()

我的新问题是,如何通过单击进度对话框中的取消按钮来取消 qprocess?

【问题讨论】:

请修正您的问题,使其成为一个清晰、自上而下可读的问题。最好使用简单的可运行示例来重现您的问题。谢谢。 【参考方案1】:

使用进度对话框的关闭按钮停止进程:

self.progress.canceled.connect(self.process.terminate)

【讨论】:

以上是关于如何通过单击 QProgressDialog 的取消按钮来取消 QProcess?的主要内容,如果未能解决你的问题,请参考以下文章

QProgressDialog::setValue 产生随机堆栈溢出

使用 QFuture 更新 QProgressDialog

QProgressDialog 在暂停期间不绘制

阻止 QProgressDialog 使停靠图标反弹

当主线程显然未阻塞时,QProgressDialog 冻结

PyQt QProgressDialog 显示为一个空白的白色窗口