55 lines
2.3 KiB
C++
55 lines
2.3 KiB
C++
#include "powermonitor.h"
|
||
|
||
void PowerMonitor::initLogin1Dbus() {
|
||
// 连接 org.freedesktop.login1 服务(系统总线)
|
||
m_login1Interface = new QDBusInterface(
|
||
"org.freedesktop.login1", // DBus 服务名
|
||
"/org/freedesktop/login1", // 对象路径
|
||
"org.freedesktop.login1.Manager", // 接口名
|
||
QDBusConnection::systemBus(), // 系统总线(关键!不是会话总线)
|
||
this
|
||
);
|
||
|
||
// 检查接口是否有效
|
||
if (m_login1Interface->isValid()) {
|
||
// 监听 PrepareForSleep 信号(签名:b = bool)
|
||
bool connectOk = QDBusConnection::systemBus().connect(
|
||
"org.freedesktop.login1", // 服务名
|
||
"/org/freedesktop/login1", // 对象路径
|
||
"org.freedesktop.login1.Manager", // 接口名
|
||
"PrepareForSleep", // 信号名
|
||
this,
|
||
SLOT(onPrepareForSleep(bool)) // 接收信号的槽函数
|
||
);
|
||
|
||
if (connectOk) {
|
||
qDebug() << "=================================================";
|
||
qDebug() << "✅ 成功连接 login1 电源管理接口";
|
||
qDebug() << "=================================================";
|
||
} else {
|
||
qDebug() << "=================================================";
|
||
qDebug() << "❌ 连接 login1 信号失败:" << QDBusConnection::systemBus().lastError().message();
|
||
qDebug() << "=================================================";
|
||
}
|
||
} else {
|
||
qDebug() << "=================================================";
|
||
qDebug() << "❌ 无法创建 login1 接口:" << m_login1Interface->lastError().message();
|
||
qDebug() << "=================================================";
|
||
}
|
||
}
|
||
|
||
// 槽函数:处理睡眠/唤醒事件
|
||
void PowerMonitor::onPrepareForSleep(bool enteringSleep) {
|
||
if (enteringSleep) {
|
||
// 系统即将进入 休眠/待机 状态
|
||
qDebug() << "=================================================";
|
||
qDebug() << "\n📥 系统即将进入睡眠(休眠/待机)";
|
||
emit aboutToSleep();
|
||
} else {
|
||
// 系统从睡眠中唤醒
|
||
qDebug() << "📤 系统已从睡眠中唤醒\n";
|
||
qDebug() << "=================================================";
|
||
emit aboutToWakeUp();
|
||
}
|
||
}
|