【Qt】Qt之重啓應用程序【轉】

簡介

今天分享的內容有些意思-如何重啓一個應用程序。其實,有時候這是一個很重要的功能點,並且很人性化、易用性很好。markdown

例如:切換用戶。當某個用戶登陸成功以後,須要切換到其它帳號,那麼這時,你就知道它的重要性了。app

效果

這裏寫圖片描述

qApp退出代碼重啓

定義退出代碼

比較好的方式,在主窗口中定義一個靜態變量:函數

static int const EXIT_CODE_REBOOT;this

並進行初始化:spa

int const Widget::EXIT_CODE_REBOOT = -123456789;.net

或者能夠定義一個全局變量或常量值。code

重啓操做

接下來定義一個槽函數,裏面包含應用程序重啓的代碼:blog

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函數來處理新的循環,將容許程序重啓:get

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

源碼下載


原文做者:一去丶二三裏
做者博客:去做者博客空間
相關文章
相關標籤/搜索