QT的使用心得(一)程序关闭
前言
最近项目的关系,我开始做QT的项目,QT相对于其他的桌面应用框架而言,资料确实有些匮乏。随着项目的开发的推进,我打算写一个系列的QT开发心得,以作记录。
这次的第一个心得就是程序关闭。QT中关闭程序的方式有很多,最常用的我也会在下面略微提一下,更多的是我的一些不一样的关闭方式。
关闭应用程序首先根据不同的QT项目类型来分,大致分为QT widget和QT 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);
}
}