QT的使用心得(一)程序关闭

前言

最近项目的关系,我开始做QT的项目,QT相对于其他的桌面应用框架而言,资料确实有些匮乏。随着项目的开发的推进,我打算写一个系列的QT开发心得,以作记录。

这次的第一个心得就是程序关闭。QT中关闭程序的方式有很多,最常用的我也会在下面略微提一下,更多的是我的一些不一样的关闭方式。

关闭应用程序首先根据不同的QT项目类型来分,大致分为QT widgetQT QML两种,当然也可以混合,如何混合也是个大坑,下次的某个心得再来填这个坑。

QT widget项目中的程序关闭

		//方法一 :exit()
         QApplication* app;
         app->exit(0);

		//方法二 :quit()
         QApplication* app;
         app->quit();

QT QML项目中的程序关闭

这里是先提一下纯QML中的程序退出。

        Button{
            text: "Quit"
            //调用Qt.quit
            onClicked: Qt.quit()
        }
        Button{
            text: "Exit"
            //调用Qt.exit
            onClicked: Qt.exit(0)
        }

重头戏来了,QML与C++混合的开发项目中程序的关闭

事先说明,我的这种构思只是我个人的解决办法,有问题或有更好的建议请留言。

先说构思,我是使用一个单态类来保存当前的进程ID,在C++中可以调用WIN API中的方法,杀死进程。在QML中为了保持一种关闭程序的方法(主要是为了实现同样的退出操作)。我是在QML的Control中绑定C++类,从而调用C++的方法,从而实现完整的程序关闭操作。其实本质就是将控制全部放在C++中实现

创建一个存储processId的单态类

//parameter.h
#include <QObject>
#include <QSharedPointer>
class  parameter
{
private:
	//
    parameter();
    qint64 processId;
    static QSharedPointer<parameter> m_destory;
public:
    ~parameter();
    static parameter* getInstance(void);
    qint64 getProcessId() const;
    void setProcessId(const qint64 &value);
};
//parameter.c
#include "parameter.h"

QSharedPointer <parameter> parameter::m_destory;
parameter *parameter::getInstance()
{
    static parameter*instance = new parameter();

    if(m_destory.isNull())
    {
        m_destory.reset(instance);
    }
    return instance;
}

qint64 parameter::getProcessId() const
{
    return processId;
}

void parameter::setProcessId(const qint64 &value)
{
    processId = value;
}

取得当前程序的进程ID(单进程软件)

#include <QApplication>

//取得当前程序的进程ID
qint64 processid = QApplication::applicationPid();

//使用单态类接收进程ID
parameter::getInstance()->setProcessId(processid);

杀死线程

#include <processthreadsapi.h>

class Killprocess:public QObject
{
Q_OBJECT
public:
    Killprocess();
    ~Killprocess();
    static void kill(qint64 processid);
};

#include "killprocess.h"


Killprocess::Killprocess():QObject()
{

}

Killprocess::~Killprocess()
{

}

void Killprocess::kill(qint64 processid)
{
    //Kill The Process

    HANDLE hProcess = OpenProcess( PROCESS_ALL_ACCESS, FALSE, processid );
    if (hProcess != NULL)
    {
        TerminateProcess(hProcess,0);
        CloseHandle(hProcess);
    }
}
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值