如何在显示主窗口之前退出Qt应用程序

卷积云

启动时,我的Qt应用程序在显示主窗口之前会显示一个包含一些选项的对话框。该对话框具有“开始”和“取消”按钮。当用户单击“新游戏”按钮时,在显示主窗口之后,稍后会使用相同的对话框。

我试图让“取消”按钮退出应用程序,如果它是唯一显示的界面元素(即在应用程序启动时)。但是,在我当前的代码中,仍显示主窗口。

如果我self.view.destroy()self.view.deleteLater()主窗口替换则在消失(并正确退出)之前会短暂闪烁,但这不是解决方案。

如果我将view.show()呼叫移到该dialog.exec_()块内,那么它也不起作用。主要是因为view.show()每次在主窗口中再次显示对话框时我都会打电话,而且还因为即使在这种情况下,应用程序并没有真正退出。在这种情况下,不会显示主窗口,但进程将继续运行(Python应用程序图标在Dock中仍然可见)。

我在这里做错了什么?我读过其他 类似的 问题,但是我不了解如何在我的情况下应用这些解决方案。

(在macOS 10.15.6上为PySide2 5.15.1)

class App:
    def __init__(self, app, game, view):
        self.app = app
        self.game = game
        self.view = view

        # Display the dialog
        # Same callback is bound to a QPushButton in MainWindow
        self.cb_start_dialog()

    def cb_start_dialog(self):
        # Do some initialisation
        dialog = DialogNewGame()  # A subclass of QDialog
        if dialog.exec_():
            # Setup the interface
        else:
            if not self.view.isVisible():
                # Condition evaluates correctly
                # (False on app launch,
                # True if main window is displayed)
                self.view.destroy()
                self.app.quit()  # Doesn't work, main window still displayed

def main():
    application = QApplication()
    view = MainWindow()             # A QWidget with the main window
    model = Game()                  # Application logic
    App(application, model, view)
    view.show()
    application.exec_()
永乐

如果对代码进行了很好的分析,则可以观察到在事件循环启动之前调用了“退出”,因此终止从未启动的事件循环是没有意义的。解决方案是在事件循环启动后立即调用X。另一方面,quit方法是静态的,因此不需要访问“ self.app”

from PySide2.QtCore import QTimer
from PySide2.QtWidgets import QApplication, QDialog, QMainWindow


class MainWindow(QMainWindow):
    pass


class DialogNewGame(QDialog):
    pass


class Game:
    pass


class App:
    def __init__(self, game, view):
        self.game = game
        self.view = view
        QTimer.singleShot(0, self.cb_start_dialog)

    def cb_start_dialog(self):
        dialog = DialogNewGame()
        if dialog.exec_():
            pass
        else:
            QApplication.quit()


def main():
    application = QApplication()
    view = MainWindow()
    model = Game()
    app = App(model, view)
    view.show()
    application.exec_()


if __name__ == "__main__":
    main()

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Qt 退出应用程序并显示另一个窗口

来自分类Dev

在退出 C# 窗口应用程序之前运行代码

来自分类Dev

即使退出应用程序,如何在菜单栏中显示应用程序图标

来自分类Dev

在显示winforms应用程序的主屏幕之前,如何显示欢迎屏幕?

来自分类Dev

自动调整qt应用程序的大小。(主窗口)

来自分类Dev

SQL Server CE如何在应用程序退出之前强制对.sdf文件进行更改?

来自分类Dev

如何在我的短期应用程序退出之前使 Logback 完全压缩?

来自分类Dev

如何在我的主应用程序打开之前加载Crystal Report

来自分类Dev

可可应用程序名称未在“强制退出应用程序”窗口中显示

来自分类Dev

在应用程序退出之前执行功能

来自分类Dev

如何在关闭应用程序之前停止TextureView侦听器并显示图像

来自分类Dev

FLUTTER:如何在应用程序开始之前显示对话框?

来自分类Dev

QT应用程序不会退出

来自分类Dev

如何从Qt应用程序驱动Excel窗口

来自分类Dev

移动应用程序:如何在不离开我的应用程序的情况下显示我的应用程序在弹出窗口中发送的OTP?

来自分类Dev

关闭最后一个窗口时,使Qt应用程序不退出

来自分类Dev

如何在“主页”按钮单击时退出应用程序?

来自分类Dev

如何在Android N中更改多窗口显示的视图?如何检查应用程序是否在多窗口中?

来自分类Dev

如何从显示应用程序窗口返回显示应用程序图标的Alt + Tab行为?

来自分类Dev

如何在Qt应用程序中同时隐藏/显示QLabel和QTextEdit?

来自分类Dev

如何在Qt中显示其他应用程序的输出视频?

来自分类Dev

如何在Windows下使用cmake在qt GUI应用程序中显示控制台

来自分类Dev

如何结束未显示任何窗口的Tkinter应用程序

来自分类Dev

如何显示(提升)应用程序的所有窗口?

来自分类Dev

打开应用程序时如何显示密码弹出窗口?

来自分类Dev

如何显示(提升)应用程序的所有窗口?

来自分类Dev

如何显示/隐藏控制台窗口应用程序?

来自分类Dev

在退出应用程序上安全退出Qt线程

来自分类Dev

如何根据特定位置和大小在QNX上显示Qt(窗口小部件)应用程序?

Related 相关文章

  1. 1

    Qt 退出应用程序并显示另一个窗口

  2. 2

    在退出 C# 窗口应用程序之前运行代码

  3. 3

    即使退出应用程序,如何在菜单栏中显示应用程序图标

  4. 4

    在显示winforms应用程序的主屏幕之前,如何显示欢迎屏幕?

  5. 5

    自动调整qt应用程序的大小。(主窗口)

  6. 6

    SQL Server CE如何在应用程序退出之前强制对.sdf文件进行更改?

  7. 7

    如何在我的短期应用程序退出之前使 Logback 完全压缩?

  8. 8

    如何在我的主应用程序打开之前加载Crystal Report

  9. 9

    可可应用程序名称未在“强制退出应用程序”窗口中显示

  10. 10

    在应用程序退出之前执行功能

  11. 11

    如何在关闭应用程序之前停止TextureView侦听器并显示图像

  12. 12

    FLUTTER:如何在应用程序开始之前显示对话框?

  13. 13

    QT应用程序不会退出

  14. 14

    如何从Qt应用程序驱动Excel窗口

  15. 15

    移动应用程序:如何在不离开我的应用程序的情况下显示我的应用程序在弹出窗口中发送的OTP?

  16. 16

    关闭最后一个窗口时,使Qt应用程序不退出

  17. 17

    如何在“主页”按钮单击时退出应用程序?

  18. 18

    如何在Android N中更改多窗口显示的视图?如何检查应用程序是否在多窗口中?

  19. 19

    如何从显示应用程序窗口返回显示应用程序图标的Alt + Tab行为?

  20. 20

    如何在Qt应用程序中同时隐藏/显示QLabel和QTextEdit?

  21. 21

    如何在Qt中显示其他应用程序的输出视频?

  22. 22

    如何在Windows下使用cmake在qt GUI应用程序中显示控制台

  23. 23

    如何结束未显示任何窗口的Tkinter应用程序

  24. 24

    如何显示(提升)应用程序的所有窗口?

  25. 25

    打开应用程序时如何显示密码弹出窗口?

  26. 26

    如何显示(提升)应用程序的所有窗口?

  27. 27

    如何显示/隐藏控制台窗口应用程序?

  28. 28

    在退出应用程序上安全退出Qt线程

  29. 29

    如何根据特定位置和大小在QNX上显示Qt(窗口小部件)应用程序?

热门标签

归档