简介

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

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

效果

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();
}

源码下载


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

【Qt】Qt之重启应用程序【转】的更多相关文章

  1. Qt之重启应用程序

    简介 今天分享的内容有些意思-如何重启一个应用程序.其实,有时候这是一个很重要的功能点,而且很人性化.易用性很好. 例如:切换用户.当某个用户登录成功之后,需要切换到其它账号,那么这时,你就知道它的重 ...

  2. windows下Qt Creator5.1.0编写程序以及调用OpenCV库

    系统说明 最近使用opencv编写程序,程序编的差不多就学习使用QT加个界面,首先声明下本人的系统和使用的软件版本, 系统: windows xp QT IDE:QT Creator5.1.0 Ope ...

  3. QT学习之第一个程序

    QT学习之第一个程序 目录 手动创建主窗口 居中显示 添加窗口图标 显示提示文本 Message Box的应用 手动连接信号与槽 手动创建主窗口 窗口类型 QMainWindow: 可以包含菜单栏.工 ...

  4. Qt, QT/E, Qtopia 的区别

    转自Qt, QT/E, Qtopia 的区别 Qt泛指Qt的所有桌面版本,比如Qt/X11,Qt Windows,Qt Mac等.由于Qt最早是在Linux中随着KDE流行开来的,因此通常很多人说的Q ...

  5. [QT]QT概述

    QT概述 基于C++的GUI开发框架,跨平台.Qt 是一个用于桌面系统和嵌入式开发的跨平台应用程序框架. QT是挪威TROLLTECH公司开发的跨平台C++工具,在UNIX下非常出名:他的宗旨是“一次 ...

  6. QT QT creator QTsdk的区别

    Qt是一个跨平台的C++图形用户界面应用程序框架.它提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能.Qt是完全面向对象的,很容易扩展,并且允许真正地组件编程. QT Creator 跨平台 ...

  7. QT,QT SDK, QT Creator 区别

    Qt是一个跨平台的C++图形用户界面应用程序框架.(不仅仅是C++,还包括QML,Qquick,html5)它提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能.Qt是完全面向对象的,很容易扩 ...

  8. Qt... configure: error: Qt (>= Qt 2.2.2) (headers…

    转载:http://blog.chinaunix.net/uid-23733724-id-290980.html     昨天开始在自己的fedora12下装qt~ 但是按照教程在/opt/Embed ...

  9. Delphi 重启应用程序(创建Bat文件的Process)

    Delphi 重启应用程序在工程主文件中加入Delay(500); //启动程序时请延时一段时间,否则只能重启一次 procedure RestartApp; var BatchFile: TextF ...

随机推荐

  1. mysql ERROR1405 access deny 问题解决

    sudo /usr/local/mysql/bin/mysqld_safe --user=mysql --skip-grant-tables --skip-networking 使用这条命令可以跳过开 ...

  2. sort() 方法用于对数组的元素进行排序

    语法 arrayObject.sort(sortby) 参数 描述 sortby 可选.规定排序顺序.必须是函数. 返回值 对数组的引用.请注意,数组在原数组上进行排序,不生成副本. 说明 如果调用该 ...

  3. C小加 之 随机数

    描述ACM队的“C小加”同学想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(0<N≤100),对于其中重复的数字,只保留一个,把其余相 ...

  4. ACMer

    Problem Description There are at least P% and at most Q% students of HDU are ACMers, now I want to k ...

  5. sql server小技巧-自动添加时间与主键自增长

    在敲机房收费系统的时候,遇到添加时间的时候总是通过vb端调用当前时间再添到sql server中,期间还有时因为添加时间格式的不统一导致一些小问题,现在才知道原来是自己孤陋寡闻,sql server ...

  6. hadoop2.6.0+eclipse配置

    [0]安装前的声明 0.1) 所用节点2个 master : 192.168.119.105 hadoop5 slave : 192.168.119.101 hadoop1 (先用一个slave,跑成 ...

  7. 搭建第一个web项目:jasperReports+ireport制作pdf报表

    一:jasperReports介绍: 在web应用中,必须面临大量的报表问题,即将数据库中的数据形成报表并进行打印.传统开发只能使用html页面设计报表,效率低且不支持别的格式.所以jasperRep ...

  8. 51nod 棋盘问题(博弈论)

    题目链接: 棋盘问题 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 上帝创造了一个n*m棋盘,每一个格子都只有可能是黑色或者白色的. 亚当和夏娃在玩一个游戏,每次寻找边长为x的正方 ...

  9. Sharepoint中有关文件夹的操作

    1.GetItemsWithUniquePermissions根据返回数量和是否返回文件夹获取唯一权限的列表项集合 对于SharePoint对象模型中SPList的GetItemsWithUnique ...

  10. Android 开源项目分类汇总

    Android 开源项目分类汇总 Android 开源项目第一篇——个性化控件(View)篇  包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView ...