精华内容
下载资源
问答
  • QT重启程序
    2021-10-11 15:28:08

    1.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_REBOO

    更多相关内容
  • 今天写一个简单的qt程序重启示例。重启吗,类似手机的重启,反正重启就是重启,也没那么多废话。 介绍两种简单的方法。 第一种:退出码重启 .h文件 #ifndef MAINWINDOW_H #define MAINWINDOW_H #include &...

    今天写一个简单的qt程序重启示例。重启吗,类似手机的重启,反正重启就是重启,也没那么多废话。

    下面展示一下演示效果:

    介绍两种简单的方法。

    第一种:退出码重启

    .h文件

    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H
    
    #include <QMainWindow>
    
    
    namespace Ui {
    class MainWindow;
    }
    
    class MainWindow : public QMainWindow
    {
        Q_OBJECT
    
    public:
        explicit MainWindow(QWidget *parent = 0);
        ~MainWindow();
    
        static int const EXIT_CODE_REBOOT;
    
    private slots:
        void on_reboot_btn_clicked();
    
    private:
        Ui::MainWindow *ui;
    };
    
    #endif // MAINWINDOW_H

    这里主要是定义一个静态变量的重启码

    static int const EXIT_CODE_REBOOT;

    当然,静态变量定义的时候我们需要在对应的.cpp文件进行初始化

    .cpp文件

    #include "mainwindow.h"
    #include "ui_mainwindow.h"
    #include<QMessageBox>
    #include<QDebug>
    
    
    int const MainWindow::EXIT_CODE_REBOOT = -123456789;
    
    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
        QPixmap pix;
        QImage image(":/image/kun.png");
        ui->label->setPixmap(pix.fromImage(image));
        ui->label->setScaledContents(true);
    }
    
    MainWindow::~MainWindow()
    {
        delete ui;
    }
    
    void MainWindow::on_reboot_btn_clicked()
    {
        QMessageBox messagebox(QMessageBox::NoIcon,"提示","你确定要重启程序吗?",
                               QMessageBox::Yes | QMessageBox::No);
        int result=messagebox.exec();
        switch (result)
        {
        case QMessageBox::Yes:
            qApp->exit(MainWindow::EXIT_CODE_REBOOT);
            break;
        case QMessageBox::No:
            qDebug()<<"不重启程序";
            break;
        default:
            break;
        }
    }

    这里我加入了一个提示框,就是点击确定按钮之后,弹出是否重启的确认框。

    main.cpp文件

    这里需要对它的循环进行修改

    #include "mainwindow.h"
    #include <QApplication>
    
    int main(int argc, char *argv[])
    {
        int nExitCode=0;
        do
        {
            QApplication a(argc, argv);
            MainWindow w;
            w.show();
    
            nExitCode=a.exec();
        }while(nExitCode==MainWindow::EXIT_CODE_REBOOT);
    
    
        return nExitCode;
    }

    第二种:QProgess重启

    这与前一种的差别就是不用定义重启码,也无需修改main函数里面的循环,直接定义一个函数即可

    .h文件

    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H
    
    #include <QMainWindow>
    
    
    namespace Ui {
    class MainWindow;
    }
    
    class MainWindow : public QMainWindow
    {
        Q_OBJECT
    
    public:
        explicit MainWindow(QWidget *parent = 0);
        ~MainWindow();
        void reboot();
    
    private slots:
        void on_reboot_btn_clicked();
    
    private:
        Ui::MainWindow *ui;
    };
    
    #endif // MAINWINDOW_H

    .cpp文件

    #include "mainwindow.h"
    #include "ui_mainwindow.h"
    #include<QMessageBox>
    #include<QDebug>
    #include<QProcess>
    #include<QDir>
    
    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
        QPixmap pix;
        QImage image(":/image/kun.png");
        ui->label->setPixmap(pix.fromImage(image));
        ui->label->setScaledContents(true);
    }
    
    MainWindow::~MainWindow()
    {
        delete ui;
    }
    
    void MainWindow::reboot()
    {
        QString program = QApplication::applicationFilePath();
        QStringList arguments = QApplication::arguments();
        QString workingDirectory = QDir::currentPath();
        QProcess::startDetached(program, arguments, workingDirectory);
        QApplication::exit();
    
    }
    
    void MainWindow::on_reboot_btn_clicked()
    {
        QMessageBox messagebox(QMessageBox::NoIcon,"提示","你确定要重启程序吗?",
                               QMessageBox::Yes | QMessageBox::No);
        int result=messagebox.exec();
        switch (result)
        {
        case QMessageBox::Yes:
            this->reboot();
            break;
        case QMessageBox::No:
            qDebug()<<"不重启程序";
            break;
        default:
            break;
        }
    }

    这里面main.cpp文件不用修改,原来是怎么样的就是怎么样的。

    展开全文
  • 1. 首先展示一段创建工程项目时都会自动创建的代码 /* QApplication 版 */ int main(int argc, char *argv[]) { QApplication a(argc, argv); ...#define RestartExitCode 666 // 定义重启的退

    1. 首先展示一段创建工程项目时都会自动创建的代码

    /* QApplication 版 */
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        
        MainWindow w;
        w.show();
    
        return a.exec();    
    }
    

    2. 关于QApplication 包含接口 exit

    调用方式

    #define RestartExitCode 666 // 定义重启的退出码
    
    
    qApp->exit(RestartExitCode); // 调用接口, 退出码为RestartExitCode 
    
    
    /* QApplication 版 */
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        
        MainWindow w;
        w.show();
    
        int exitCode = a.exec(); // 接受接口的退出码信息
        if (RestartExitCode == exitCode) 
        {
            QProcess::startDetached(qApp->applicationFilePath(), QStringList());
            return 0;
        }
        return exitCode;
    }
    

    3. 附带Qt for android重启方式

    
    工程文件添加 
    android {
        QT += androidextras
    }
    
    头文件include 时加ifdef判断, 否则mingw编译时不支持
    #ifdef Q_OS_ANDROID
    #include <QtAndroid>
    #endif
    
    /* 处理退出的退出码, 判断退出码是否是我们预定的重启码 */
    int exitHandle(int exitCode) 
    {
        /* 是否需要重启 */
        if (RestartExitCode != exitCode) 
            return exitCode;
    #ifdef Q_OS_ANDROID
        auto activity = QtAndroid::androidActivity();
        auto packageManager = activity.callObjectMethod("getPackageManager","()Landroid/content/pm/PackageManager;");
        auto activityIntent = packageManager.callObjectMethod("getLaunchIntentForPackage","(Ljava/lang/String;)Landroid/content/Intent;",activity.callObjectMethod("getPackageName","()Ljava/lang/String;").object());
    auto pendingIntent = QAndroidJniObject::callStaticObjectMethod("android/app/PendingIntent", "getActivity","(Landroid/content/Context;ILandroid/content/Intent;I)Landroid/app/PendingIntent;",activity.object(), jint(0), activityIntent.object(),QAndroidJniObject::getStaticField<jint>("android/content/Intent","FLAG_ACTIVITY_CLEAR_TOP"));
    auto alarmManager = activity.callObjectMethod("getSystemService","(Ljava/lang/String;)Ljava/lang/Object;",QAndroidJniObject::getStaticObjectField("android/content/Context","ALARM_SERVICE","Ljava/lang/String;").object());
    alarmManager.callMethod<void>("set","(IJLandroid/app/PendingIntent;)V",QAndroidJniObject::getStaticField<jint>("android/app/AlarmManager", "RTC"),jlong(QDateTime::currentMSecsSinceEpoch() + 10), pendingIntent.object()); //QDateTime::currentMSecsSinceEpoch() + 100
    
    #else
        QProcess::startDetached(qApp->applicationFilePath(), QStringList());
    #endif
        return 0;
    } 
    
    
    /* 使用 */
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        
        MainWindow w;
        w.show();
    
        return exitHandle(a.exec());    
    }
    

     

    展开全文
  • 今天小编就为大家分享一篇关于嵌入式Linux重启QT应用程序的简单办法(基于QT4.8 qws),小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
  • Windows Qt 程序崩溃重启

    千次阅读 2019-09-10 13:43:18
    最近的项目需求,对方设备在无人值守时,一但程序出现错误死机,需要自己主动重启。所以就研究了一下Windows下Qt的崩溃重启。俗话说没有图BB个JB。 大家都遇到过这种情况,当领导无聊时在办公室踱步,突然走到你...

            最近的项目需求,对方设备在无人值守时,一但程序出现错误死机,需要自己主动重启。所以就研究了一下Windows下Qt的崩溃重启。俗话说没有图BB个JB。

            大家都遇到过这种情况,当领导无聊时在办公室踱步,突然走到你身边询问项目进展,本来你想秀一波,没想到仓朗朗一声巨响弹出了上面的尴尬窗口。哈哈,平时自测都好好的,怎么你一来就直接宕掉了,这也太直观了吧!

             唉~  开个玩笑,不过你要是写成下面这个样子:

             呃... 起码不会很尴尬,毕竟你的程序优雅的活了起来。

              测试demo链接

             原理很简单,Qt的信号槽机制大家都知道,其实Qt程序在启动和退出时都会有信号发出,我么只需要捕获信号然后判断再执行操作就好了。QProcess 可以捕获的信号如下:

            这里我们用到了QProcess类,此外我们还需要另外一个监测程序,比如说写一个名为watchdog的程序作为监视。在watchdog中使用  

          void QProcess::start(const QString &program, const QStringList &arguments, OpenMode mode = ReadWrite)

      启动主程序,第一个参数为可执行程序的路径,注意要用 “\\”间隔,QStringList类型的参数为程序运行时参数,如没有就直接写入QStringList()就好。

          这样:

        process->start("F:\\TEST\\TestView\\debug\\TestView.exe",QStringList());
    

    然后,我们通过信号槽来获取主程的运行状态:直接connect就可以:

    connect(process,SIGNAL(started()),this,SLOT(pro_started())) connect(process,SIGNAL(errorOccurred(QProcess::ProcessError)),this,SLOT(pro_error(QProcess::ProcessError))); connect(process,SIGNAL(finished(int,QProcess::ExitStatus)),this,SLOT(pro_finish(int,QProcess::ExitStatus))); connect(process,SIGNAL(stateChanged(QProcess::ProcessState)),this,SLOT(pro_StateChanged(QProcess::ProcessState)));

    最主要的是程序结束时的  finished(int,QProcess::ExitStatus) 信号,

    void finished(int exitCode, QProcess::ExitStatus exitStatus);

    通过第一个int型参数,即主程序退出时的返回值,我们就可以得到程序是否为正常退出。

    正常退出时  exitCode == 0,反之 exitCode < 0 的时候程序得表现为出错。

    So,小于零 我们再 执行次  void QProcess::start()  操作就ok拉。

     

    这样就可以神不知鬼不觉的把死掉的程序重启吗!!?

    测试过你就会发现,程序出错时系统会弹出一个对话框:

    这里如果不是手动关闭,死掉的程序是不会自己关闭的,所以接下来我们要做的就是在程序出错死掉时不让这个对话框弹出,而是直接退出。

            用到 Windows API中的: (百度百科)添加在main函数的开始

      WINBASEAPI LPTOP_LEVEL_EXCEPTION_FILTER WINAPI SetUnhandledExceptionFilter (LPTOP_LEVEL_EXCEPTION_FILTER lpTopLevelExceptionFilter);

    异常捕获函数,IpTopLevelExceptionFilter(EXCEPTION_POINTERS *pException)  需自己实现一下。

    里面直接return:

    LONG ApplicationCrashHandler(EXCEPTION_POINTERS *pException)
    {    // 在这里添加处理程序崩溃情况的代码    
         /*some function()*/    
         return EXCEPTION_EXECUTE_HANDLER;
    }
    最后做一下故障记录到文件,完美解决。

    简单的写了一个测试demo,在这里:我是资源连接

    demo中按钮槽函数中写了一个错误,为: 获取vector的越界值。

    vector<int> test;

    int i = test[100];

    qDebug()<<i;

    测试重启成功。

    写给不会的朋友,不喜勿喷,互相学习,如有不足,请多指教,谢谢。

     

    展开全文
  • Qt 崩溃重启.zip

    2019-09-10 14:02:23
    Windows 平台下,Qt程序出现错误崩溃死机时,可自动监测出程序当前的状态,并重新启动,同时生成故障日志。适用于例如无人值守的程序。资源包括 1、用于测试的主程序; 2、用于监测主程序状态的监测程序。 如果需要...
  • Qt程序自动重启的实现

    千次阅读 2019-03-06 15:43:01
    正常退出调用exit() 或quit()就行,想要自已重启可按下面代码: void XXX:onRestart() { //类中调用 qApp-&gt;exit(888); } 主main函数中处理 int main(int argc, char* argv[]) { QApplication app...
  • QT程序自动重启

    2020-10-13 14:06:59
    要想理解重启,先得看看Qt程序怎么退出! 1、退出 int main(int argc, char** argv) { QApplication a(argc, argv); Widget w; w.show() return a.exec(); } 最后一句启动了主线程的事件循环。而要退出...
  • Qt重启应用程序

    千次阅读 2018-06-03 14:55:19
    重启主要有两种方式退出码重启和QProcess重启。退出码重启定义退出代码比较好的方式,在主窗口中定义一个静态变量:static int const EXIT_CODE_REBOOT;并进行初始化:int const Widget::EXIT_CODE_REBOOT = -...
  • Qt 应用程序重启

    千次阅读 2019-04-05 15:27:34
    Qt程序的一般结构如下: int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; w.show(); return a.exec(); } 最后一句启动了主线程的事件循环。而要退出程序...
  • QT实现应用程序重启

    千次阅读 2015-12-21 22:21:24
    示例程序代码上传至https://github.com/gatieme/AderXCoding/tree/master/qt/restart问题描述有时候写的程序在运行中有时候出现问题,期望能够通过重启来解决,但是在我们的Qt中并没有内置实现这样功能的接口,这就...
  • QT 程序 注销 重启

    2016-05-25 09:46:22
    QT 程序注销重启的两种方法!
  • Qt 程序异常崩溃,记录Dum文件并重启程序 ​ 最近还是在公司写BUG,不过也没有啥测试人员,就是我单打独斗,程序是烧在机器里面的。在家里出现BUG还好,在外面出现BUG,那就有点丢人了,不怕出问题,不能影响用户...
  • 重启qt程序的方法

    千次阅读 2017-02-25 10:36:38
    通过在widget中调用qApp-exit()函数传递一个特定的退出码,在main()函数中判断qapplication的返回状态,然后启动程序即可。 //mainwindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H #include #include ...
  • Qt应用程序自动重启

    千次阅读 2014-08-27 15:58:24
    老有人问如何让Qt的应用程序自动重启,稍微写一点,也顺便理理自己的思路 2011.10.26 ...Qt程序的一般结构如下: int main(int argc, char** argv) { QApplication app(argc, argv); Widget w; w.s
  • Qt应用程序重新启动的实现方式

    千次阅读 2018-12-17 23:05:02
    比如开发了一个应用程序demo在板子上跑,但是可能目前这个demo不完善,会出现中途崩溃或者错误的问题。如果每次都重新启动板子的话会很浪费时间,如果程序死掉或者出错时可以自动重新启动,那么效果也许会更好。 ...
  • Qt实现重启功能

    2022-04-17 15:23:30
    Qt重启程序
  • Qt重启程序

    2018-05-24 23:49:41
    重启程序 点击重启程序
  • 在做应用程序的过程中,多语言的切换是必不可少的功能,今天看一看怎么用Qt自带的翻译类 QTranslator 进行多语言之间的无缝切换,并且不会重启程序。 首先我们看下实现效果: 1、传统的设置语言的方法 Qt的语言翻译...
  • 代码: void Widget::on_pushButton_clicked() { QApplication::closeAllWindows(); QProcess::startDetached(QApplication::applicationFilePath(), QStringList()); } 演示:
  • 可设置检测的程序名称。 可设置udp通信端口。 可设置超时次数。 自动记录已重启次数。 自动记录最后一次重启时间。 是否需要重新刷新桌面。 可重置当前重启次数和最后重启时间。 自动隐藏的托盘运行或者后台运行。 ...
  • QT学习记录 — 实现程序重启 程序重启的方法有两种,我选择了其中一种:依赖于QProcess的,因为它可封装成接口使用方便. 另一种方式有兴趣的可以自行去查找. 头文件 #include <QProcess> #include <QDir> ...
  • Qt程序实现自动重启

    2020-04-08 14:13:35
    方法一: //restart hmi qApp->quit(); QProcess::startDetached(qApp->applicationFilePath(), QStringList()); 方法二: 1、类中调用 qApp->exit(888); 2、main.cpp中实现 ... if(e == 8...
  • )死机,因此只能弄个错误捕获,然后自动重启了。 windows下的异常捕获过程可以参考文章开头那个博文。但是那篇文章中的QMessageBox,会有无法点击的问题(假如异常是在子线程触发的)。 下面的代码是对

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,260
精华内容 4,504
关键字:

QT程序重启