一、概述
基于Qt的用于开发系统服务(守护进程)和后台服务,有以下几个优秀的开源 QtService 框架和库。
1. QtService (官方解决方案)
GitHub: https://github.com/qtproject/qt-solutions/tree/master/qtservice
特点:
-
官方提供的服务框架
-
支持 Windows 服务和 Linux 守护进程
-
提供服务安装、卸载、启动、停止等功能
-
需要从 Qt Solutions 模块集成
2. QSimpleDaemon
GitHub: https://github.com/amir-saniyan/QSimpleDaemon
特点:
-
轻量级守护进程实现
-
支持 Linux 系统
-
简单易用,适合小型项目
3. QtDaemon
GitHub: https://github.com/stephenquan/QtDaemon
特点:
-
跨平台守护进程框架
-
支持 Windows 和 Linux
-
提供服务控制和管理功能
二、QtService
QtService 是 Qt 官方提供的服务框架解决方案,用于开发跨平台的系统服务(Windows 服务/Linux 守护进程)。
1、环境配置
1). 获取 QtService
QtService 是 Qt Solutions 的一部分,需要单独获取:
git clone https://github.com/qtproject/qt-solutions.git
cd qt-solutions/qtservice
qmake
make
sudo make install # Linux
2). 项目集成
在你的项目中包含:
# 在.pro文件中添加
include(/path/to/qtservice/qtservice.pri)
或 CMake:
add_subdirectory(/path/to/qtservice)
target_link_libraries(your_target QtSolutions_Service)
2、基础服务开发
1). 创建服务类
#include <qtservice.h>
class MyService : public QtService<QCoreApplication>
{
public:
explicit MyService(int argc, char **argv)
: QtService<QCoreApplication>(argc, argv, "MyQtService")
{
// 服务基本信息配置
setServiceDescription("A custom Qt-based service");
setServiceFlags(QtServiceBase::CanBeSuspended);
}
protected:
void start() override
{
logMessage("Service starting...", QtServiceBase::Information);
// 初始化工作
m_timer = new QTimer(this);
connect(m_timer, &QTimer::timeout, this, &MyService::onTimer);
m_timer->start(3000); // 3秒间隔
emit started();
}
void pause() override
{
logMessage("Service pausing...", QtServiceBase::Information);
m_timer->stop();
}
void resume() override
{
logMessage("Service resuming...", QtServiceBase::Information);
m_timer->start();
}
void stop() override
{
logMessage("Service stopping...", QtServiceBase::Information);
m_timer->stop();
QCoreApplication::quit();
}
private slots:
void onTimer()
{
static int count = 0;
logMessage(QString("Service running [%1]").arg(++count),
QtServiceBase::Information);
}
private:
QTimer *m_timer;
};
2). 主程序入口
#include <QCoreApplication>
int main(int argc, char *argv[])
{
MyService service(argc, argv);
// 命令行参数处理
QStringList args = QCoreApplication::arguments();
if (args.contains("--install")) {
return service.install(args);
}
else if (args.contains("--uninstall")) {
return service.uninstall();
}
else if (args.contains("--start")) {
return service.start();
}
else if (args.contains("--stop")) {
return service.stop();
}
else if (args.contains("--pause")) {
return service.pause();
}
else if (args.contains("--resume")) {
return service.resume();
}
else if (args.contains("--version")) {
qDebug() << "MyService Version 1.0";