ScreenLockDetector/src/powermonitor.cpp

55 lines
2.3 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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();
}
}