1.)我想重新启动我的QT4应用程序。只是正常关机并启动相同的应用程序。QT4:如何重新启动应用程序?重新设置?
2)为什么?那么我需要一个选项来“重置”一切。重新启动应用程序似乎是最简单的方法。问题是,有很多类和一切。我没有时间把他们的每一个设置恢复到标准,每个文本框,小工具清除...我知道应用程序重新启动不是最好的方式,你认为有什么其他方式?
谢谢
1.)我想重新启动我的QT4应用程序。只是正常关机并启动相同的应用程序。QT4:如何重新启动应用程序?重新设置?
2)为什么?那么我需要一个选项来“重置”一切。重新启动应用程序似乎是最简单的方法。问题是,有很多类和一切。我没有时间把他们的每一个设置恢复到标准,每个文本框,小工具清除...我知道应用程序重新启动不是最好的方式,你认为有什么其他方式?
谢谢
你可以删除类和相同的QApplication
1)你可以运行一个脚本下的main()创建新的,日程操作系统后,开始您的应用程序。
2)写一个单独的类,它包含所有的应用程序设置。根据需要重置。
滑稽请求。只是预留“重新启动”退出代码,做类似的信息(未经测试):
int main(int argc, char **argv)
{
QApplication app(argc, argv);
...
int ret = app.exec();
if (ret == EXIT_RESTART) {
::execve(...);
}
return ret;
}
然后,你可以调用的QApplication ::出口(EXIT_RESTART)的任何地方,你应该是好去。或者使用包装脚本来做同样的事情。 (在你处理命令行参数令人满意,如果你的应用程序需要的任何两种情况下确保。)
一个清洁的方法是将所有需要被重置为同一信号的东西连接。
理智的事情在这种情况下做的是把创建/初始化窗口小部件,等所有的东西,在一个单一的功能(当然,它可以调用子功能)。当您需要重置所有内容时,只需调用它即可。根据确切的实现,您可能需要先删除/取消初始化。
对于重新启动,你可以在quiting这个进程后使用startDetached
的应用程序:
#include <QApplication>
#include <QProcess>
...
// restart the app:
qApp->quit();
QProcess::startDetached(qApp->arguments()[0], qApp->arguments());
这种方法适用于PyQt的。我编写它用于清除所有设置并使用干净设置重新启动应用程序。 application_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
您也可以在这里使用“try-catch”而不是返回码。当你认为是时候重新启动时,抛出一个已知的异常。它有一个好处,即使在碰撞条件下也可以重新启动。 – j4x 2011-03-04 13:18:57
在一般情况下,Qt与例外不兼容。一些用法是安全的,但据我所知,并不推荐。请参阅[Qt例外安全](http://doc.qt.nokia.com/4.6/exceptionsafety.html)。 – Mat 2011-03-04 15:03:08