简介

今天分享的内容有些意思-如何重启一个应用程序。其实,有时候这是一个很重要的功能点,而且很人性化、易用性很好。

例如:切换用户。当某个用户登录成功之后,需要切换到其它账号,那么这时,你就知道它的重要性了。

效果

qApp退出代码重启

定义退出代码

比较好的方式,在主窗口中定义一个静态变量:

static int const EXIT_CODE_REBOOT;

并进行初始化:

int const Widget::EXIT_CODE_REBOOT = -123456789;

或者可以定义一个全局变量或常量值。

重启操作

接下来定义一个槽函数,里面包含应用程序重启的代码:

void Widget::reboot()
{
qApp->exit(Widget::EXIT_CODE_REBOOT);
}

创建一个操作,将使用上面的槽来重启程序。

QPushButton *pButton = new QPushButton(this);
pButton->setText(QStringLiteral("重启"));
connect(pButton, SIGNAL(clicked(bool)), this, SLOT(reboot()));

修改应用程序循环

最后一步,修改应用程序的main函数来处理新的循环,将允许程序重启:

int main(int argc, char *argv[])
{
int nExitCode = 0; do {
QApplication a(argc, argv); Widget w;
w.show(); nExitCode = a.exec();
} while(nExitCode == Widget::EXIT_CODE_REBOOT); return nExitCode;
}

上面的方式介绍完了,还有一种更简单的方式,使用QProcess启动。

QProcess重启

无需要定义重启码,也无需要修改应用程序循环。只需要一个简单的槽函数即可。

定义一个槽函数,里面包含应用程序重启的代码:

void Widget::reboot()
{
QString program = QApplication::applicationFilePath();
QStringList arguments = QApplication::arguments();
QString workingDirectory = QDir::currentPath();
QProcess::startDetached(program, arguments, workingDirectory);
QApplication::exit();
}

源码下载


原文作者:一去丶二三里
作者博客:去作者博客空间

最新文章

  1. 5种处理js跨域问题方法汇总(转载)
  2. linux 高性能服务器编程
  3. 关于 《cocoapods 的taobao的镜像停止更新问题》
  4. [转] 配置Log4j
  5. UVA 658 It's not a Bug, it's a Feature! (最短路,经典)
  6. 设置Windows 远程协助与远程桌面
  7. 浅谈android应用性能之内存(转)
  8. JDBC与ODBC的区别与应用
  9. Makefile详解--隐含规则
  10. iOS便捷开发工具分享
  11. MVC Controller 与 View 传值
  12. JavaScript事件处理
  13. [UI]抽屉菜单DrawerLayout分析(二)
  14. IE升级到10.0,VS2010启动调试时报“未能将脚本调试器附加到计算机..”
  15. 浅谈CSS3动画的凌波微步--steps()
  16. CAN通讯的总结
  17. context.go
  18. asp.net core 系列之用户认证(authentication)
  19. vs文件上传失败--超过最大字符限制
  20. 网页中,鼠标点击与javascript的click事件怎么区分处理

热门文章

  1. 给学习IT、编程者的看
  2. redis 简介
  3. SQL数据缓存依赖 [SqlServer | Cache | SqlCacheDependency ]
  4. postgres函数
  5. 【python,logging】python中的logging模块
  6. MySQL优化之COUNT(*)效率
  7. Storm累计求和中使用各种分组Grouping
  8. 1154 能量项链[区间dp]
  9. OpenFlow概述
  10. 【CSS3】---text-overflow 与 word-wrap