QT4:如何重启应用程序?重新设置? [复制]

Posted

技术标签:

【中文标题】QT4:如何重启应用程序?重新设置? [复制]【英文标题】:QT4: How to restart application? Reset settings? [duplicate] 【发布时间】:2011-02-26 14:57:36 【问题描述】:

1.) 我想重新启动我的 QT4 应用程序。只是正常关闭和启动同一个应用程序。

2.) 为什么?好吧,我需要一个“重置”一切的选项。重新启动应用程序似乎是最简单的方法。问题是,有很多类和一切。我没有时间把它们的每一个设置都恢复到标准,每一个文本框、小部件都要清除......我知道应用程序重启不是最好的方法,你认为还有什么其他方法吗?

谢谢

【问题讨论】:

【参考方案1】:

要重新启动应用程序,您可以在退出进程后使用startDetached

#include <QApplication>
#include <QProcess>

...

// restart the app:
qApp->quit();
QProcess::startDetached(qApp->arguments()[0], qApp->arguments());

【讨论】:

此解决方案不适用于设备,仅适用于模拟器,但不能在诺基亚 E7 上重新启动 各种设备我真的不知道,但是我在windows上测试过,效果很好【参考方案2】:

1) 您可以运行脚本,安排操作系统稍后启动您的应用程序。

2) 编写一个包含所有应用程序设置的单独类。需要时重置。

【讨论】:

【参考方案3】:

有趣的请求。只需为“重新启动”保留一个退出代码并执行类似(未经测试)的操作:

int main(int argc, char **argv)

 QApplication app(argc, argv);
 ...
 int ret = app.exec();
 if (ret == EXIT_RESTART) 
   ::execve(...);
 
 return ret;

然后你可以在任何地方调用 QApplication::exit(EXIT_RESTART) 并且你应该很高兴。或者使用包装脚本来做同样的事情。 (如果您的应用需要任何命令行参数,请确保在这两种情况下都能令人满意地处理命令行参数。)

一种更简洁的方法是将所有需要重置的东西连接到同一个信号。

【讨论】:

您也可以在这里使用“try-catch”而不是返回码。当您认为是时候重新启动时,抛出一个已知异常。它的好处是即使在崩溃情况下也可以重新启动。 Qt 在一般情况下不能很好地与异常混合。有些用法是安全的,但据我所知不推荐。见Qt exception safety。【参考方案4】:

您可以在同一 QApplication 下的 main() 中删除类并创建新类

【讨论】:

【参考方案5】:

在这种情况下,明智的做法是将所有创建/初始化小部件等的东西放在一个函数中(当然,它可以调用子函数)。当您需要重置所有内容时,只需调用它即可。根据具体的实现,您可能需要先删除/取消初始化这些东西。

【讨论】:

【参考方案6】:

此方法适用于 PyQt。我写它是为了擦除所有设置并使用干净的设置重新启动应用程序。 application_main是main方法,clearSettings是清除设置的槽。

class GuiMain

    #Most of implementation missing

    def clearSettings(self):
        """Deletes all settings, and restarts the application"""
        #TODO: save changes
        setting_store = QSettings()
        setting_store.clear()
        setting_store.sync()
        QApplication.exit(GuiMain.restart_code)

    restart_code = 1000

    @staticmethod
    def application_main():
        """
        The application's main function. 
        Create application and main window and run them.
        """
        while True:
            app = QApplication(sys.argv)
            window = GuiMain()
            window.show()
            ret = app.exec_()
            if ret != GuiMain.restart_code:
                break
            del window
            del app

【讨论】:

以上是关于QT4:如何重启应用程序?重新设置? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

VMWare克隆复制的虚拟机如何重新设置ip地址

如何重启 PyQt4 应用程序

VMWare克隆复制的虚拟机如何重新设置ip地址

iPhone重启时运行应用程序? [复制]

应用重启后如何重新加入演员会话?

tomcat重启相当于服务重启?