Qt应用程序重启

重启应用程序是一种常见的操作,在Qt中实现非常简单,需要用到QProcess类一个静态方法:

1 // program, 要启动的程序名称
2 // arguments, 启动参数
3 bool startDetached(const QString &program, const QStringList &arguments);

下面通过一个示例来演示:

【创建一个窗口】

接下来实现点击【Restart】按钮实现程序重启的功能。

 1 // dialog.h
 2 #ifndef DIALOG_H
 3 #define DIALOG_H
 4
 5 #include <QDialog>
 6
 7 // define a retcode: 773 = ‘r‘+‘e‘+‘s‘+‘t‘+‘a‘+‘r‘+‘t‘ = restart
 8 static const int RETCODE_RESTART = 773;
 9
10 namespace Ui {
11 class Dialog;
12 }
13
14 class Dialog : public QDialog
15 {
16     Q_OBJECT
17
18 public:
19     explicit Dialog(QWidget *parent = 0);
20     ~Dialog();
21
22 private slots:
23     void on_pushButton_clicked();
24
25 private:
26     Ui::Dialog *ui;
27 };
28
29 #endif // DIALOG_H
 1 // dialog.cpp
 2 #include "dialog.h"
 3 #include "ui_dialog.h"
 4
 5 Dialog::Dialog(QWidget *parent) :
 6     QDialog(parent),
 7     ui(new Ui::Dialog)
 8 {
 9     ui->setupUi(this);
10     ui->pushButton->setStyleSheet("color:black");
11 }
12
13 Dialog::~Dialog()
14 {
15     delete ui;
16 }
17
18 void Dialog::on_pushButton_clicked()
19 {
20     qApp->exit(RETCODE_RESTART);
21 }

在main函数中判断退出码是否为“RETCODE_RESTART”,来决定是否重启。

 1 // main.cpp
 2 #include "dialog.h"
 3 #include <QApplication>
 4 #include <QProcess>
 5
 6 int main(int argc, char *argv[])
 7 {
 8     QApplication a(argc, argv);
 9     Dialog w;
10     w.show();
11
12     //return a.exec();
13     int e = a.exec();
14     if(e == RETCODE_RESTART)
15     {
16         // 传入 qApp->applicationFilePath(),启动自己
17         QProcess::startDetached(qApp->applicationFilePath(), QStringList());
18         return 0;
19     }
20     return e;
21 }

【举一反三】
按照这个思路,也可以实现Qt应用程序的自升级。不过一般自升级至少需要两个exe,避免文件占用问题。
例如: app.exe 和 update.exe,app如需升级,可以在退出时启动update.exe;update.exe 下载并更新应用程序后,启动app.exe。

时间: 2024-10-15 07:51:17

Qt应用程序重启的相关文章

让你的 Qt 桌面程序看上去更加 native(一共六篇)

<让你的 Qt 桌面程序看上去更加 native>是一个系列文章.在这个系列中,你将会了解到如何让你的 Qt 桌面应用程序看上去更加 native.这里,我假设你已经清楚如何使用 Qt 编写桌面应用程序,因为文章中大多都是所谓的“细节”,而有时候恰恰是这些“细节”决定着用户体验.同时,这里的程序都是指桌面程序,不包括各个嵌入式平台. 关于 Qt 的介绍这里就不再赘述.这里只说明一点,相比其他的 C++ UI库,Qt 的处理实际上更类似 Java 的 Swing.Qt 的大部分组件都是由自己的绘

Linux下Qt应用程序的发布(使用LDD命令查看所有依赖的库文件)

最近一直在学习Qt,用Qt写了一个程序,但是不知道怎么发布,网上说的都是在windows下怎么发布Qt应用程序,但是,在windows下Qt应用程序依赖的库文件与linux下的名字不同.于是,我就想到Linux下有没有这么一个命令,能够找到一个可执行文件运行时所依赖的库文件,百度一下,还真的有ldd命令. ldd的作用是打印可执行文件依赖的共享库文件,它是glibc的一部分: [email protected]:~# ldd --helpUsage: ldd [OPTION]... FILE..

不需要用任何辅助工具打包Qt应用程序

不需要用任何辅助工具打包Qt应用程序.方法如下:    生成release文件后,双击里面的exe文件,会弹出一个对话框,里面提示缺少哪一个DLL文件, 然后根据该文件名到你安装QT软件的目录下的/bin文件夹里找到相应DLL文件,复制到release文件夹里 ,注意一定要到/bin目录下查找,因为QT安装目录里有多个同名的DLL文件,但功能不同.这样不断循环 添加所需DLL文件,添加五六个之后软件就可以运行了

使用Nginx解决IIS绑定域名导致应用程序重启的问题

在将多个站点迁移到一个站点(Tenant Feature)的时候碰到了一个棘手的问题,用户需要绑定自定义域名,但IIS绑定域名的时候会导致这个站点重启,那么只要一个用户绑定了一个域名则会导致这个应用上的其它租户都会受到影响,下面写出我们的解决方案,但不一定是最优的. 问题在IIS上绑定域名导致应用程序重启 一个简单的测试 1.新建一个空MVC项目,在MvcApplication类中定义一个全局的静态变量 2.创建一个控制器和视图 3.在视图页对MvcApplication中的Count进行++并

qt ui程序使用Linux的文件操作open、close (转)

原文地址:qt ui程序使用Linux的文件操作open.close 作者:kjpioo 提出这个问题是因为在qt的QWidget类型的对象中,close()函数会和QWidget::close()冲突,如果在类函数实现时直接用close(),在程序编译时会提示提示错误(具体什么错误不记得了). 错误原因是QWidget::close()与stdio.h中的文件关闭标准函数close()产生了歧义.所以可以参考下文链接中的解决方案. http://bytes.com/topic/c/answer

分享我用Qt开发应用程序【一】,附绿色版下载,以后会慢慢公布源码

写在前面: 1.第一版的代码还有些烂,等功能开发齐全了,做一次重构,再慢慢分享代码 2.邮箱功能.自动升级功能还没有做,笔记功能和备忘功能是好用的,大家如果不嫌弃,可以先用起来 3.笔记功能目前还不能直接贴图或贴附件到编辑器里去,我后续会把这个功能加上去 4.用的是qt5.3+sqlite 3 5.笔记里的编辑器是用webview引入进来的kindeditor,本来打算用百度开源的编辑器,但是一启动就崩溃,联系百度的开发人员都没能解决,后来就放弃尝试了 6.界面中的所有icon图标都是用的fon

qt 创建程序目录

voidinitDir(){QStringuserFilePath=QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation)+"/Mysoft";QDir*doc=newQDir;if(!doc->exists(userFilePath))doc->mkdir(userFilePath);}qt 创建程序目录,布布扣,bubuko.com

Qt开发程序在Windows 10应用需要管理员运行的解决思路

Qt开发程序在Windows 10应用需要管理员运行的解决思路 过了很长的时间没有发布博客了,但是我依然努力地开发Qt程序.目前呢,我发现开发Qt程序在Windows 10上有一个怪现象--有些程序右下角加上了盾牌的标志.那这个为什么呢? 原来是因为我的程序名称包含了Patch,结果就包含了加上了盾牌的标志.如果我去掉了Patch标志,盾牌就消失了.原来Windows对于文件名的一些敏感字,会选择性地做出一些防御操作.看来Windows 10在给我们安全的同时还给我们带来了"意想不到"

【转】设置Qt应用程序图标及应用程序名

一直以来很纠结给qt应用程序添加图标问题,在网上收过一次,但是感觉不够完整,现将自己的实现过程记录下,以便以后查看: 通过网上的例子知道qt助手中有相关说明: Setting the Application Icon The application icon, typically displayed in the top-left corner of an application's top-level windows, is set by calling theQWidget::setWind