Qt 如何检测QDialog.exec()是否处于活动状态 是否有一种方法来检测当前执行是否在q对话?

Qt 如何检测QDialog.exec()是否处于活动状态 是否有一种方法来检测当前执行是否在q对话?,qt,Qt,我是DreamPie(一个Python shell)的作者,它允许您在显示QtGUI时运行Python代码。它通过运行Qt事件循环1/10秒,然后检查是否需要执行任何Python命令来实现这一点。事件循环被QTimer停止,该QTimer在超时后调用QApplication.quit() 但是,如果QDialog.exec()处于活动状态,我不想调用QApplication.quit(),因为它会破坏代码。当前的解决方案是通过检查QApplication.activeModalWidget()是

我是DreamPie(一个Python shell)的作者,它允许您在显示QtGUI时运行Python代码。它通过运行Qt事件循环1/10秒,然后检查是否需要执行任何Python命令来实现这一点。事件循环被QTimer停止,该QTimer在超时后调用QApplication.quit()

但是,如果QDialog.exec()处于活动状态,我不想调用QApplication.quit(),因为它会破坏代码。当前的解决方案是通过检查QApplication.activeModalWidget()是否为None来检查是否存在活动的模式对话框。但是,我目前有一个模式对话框,它不是用QDialog.exec()运行的,它会无缘无故地阻止Python命令

只有当QDialog.exec()不递归调用事件循环时,是否有办法退出该循环


谢谢

您可以使用
QDialog.isVisible
检查对话框是否可见。通常,模式对话框只有在执行时才可见。

您可以通过简单地在qtimer中执行python来阻止事件循环。您的对话框是否有拒绝/接受按钮,或者只有提示性的“确定”?如果对话框中只有OK按钮是“accept”按钮,那么你就可以检查结果是否被更改为accept。ratchet freak:确实可以,但这将意味着代码的大重构,因为它必须在没有安装Qt的情况下工作。Kamil Klimek:这是用户的对话框,可以是任何内容。DreamPie允许您运行任何Python代码。谢谢。然而,我碰巧有一个对话框是模态的和可见的,但不是用exec()运行的,所以在它可见时运行其他Python代码没有问题。