feat: 添加GPU温度/使用率/显存实时监控

- C++后端:GpuInfo扩展统计字段,readGpuStats()支持NVIDIA(nvidia-smi)和AMD(sysfs)
- PCI到DRM card映射,新增gpuStats属性和refreshStats方法
- QML前端:弹窗卡片显示温度(带颜色)、GPU使用率进度条、显存使用
- 任务栏tooltip显示简洁摘要(厂商简称+温度+使用率)
- 定时刷新:弹窗和tooltip打开时每2秒刷新,关闭时停止
- 优化卡片布局:压缩高度和间距,弹窗高度调整至420px
This commit is contained in:
2026-07-13 23:08:08 +08:00
parent 88e03f14d2
commit 403ae8a69b
3 changed files with 336 additions and 31 deletions
+15
View File
@@ -17,6 +17,14 @@ struct GpuInfo {
QString driver; // 驱动模块名,如 "nvidia"
QString driverVersion; // 驱动版本
QString pciId; // PCI ID,如 "01:00.0"
int drmCard; // DRM 卡号,如 0, 1(-1 表示未找到)
// 实时统计
int temperature; // 温度 (°C),-1 表示不可用
int gpuUsage; // GPU 使用率 (%)-1 表示不可用
int memUsage; // 显存使用率 (%),-1 表示不可用
int memTotal; // 显存总量 (MB),-1 表示不可用
int memUsed; // 显存已用 (MB),-1 表示不可用
};
class GraphicsDriverApplet : public DApplet
@@ -26,6 +34,7 @@ class GraphicsDriverApplet : public DApplet
Q_PROPERTY(QString deviceInfo READ deviceInfo NOTIFY deviceInfoChanged)
Q_PROPERTY(QString currentDriver READ currentDriver NOTIFY currentDriverChanged)
Q_PROPERTY(QString gpuSummary READ gpuSummary NOTIFY gpuSummaryChanged)
Q_PROPERTY(QStringList gpuStats READ gpuStats NOTIFY gpuStatsChanged)
Q_PROPERTY(bool ready READ ready NOTIFY readyChanged)
public:
@@ -38,18 +47,23 @@ public:
QString deviceInfo() const;
QString currentDriver() const;
QString gpuSummary() const;
QStringList gpuStats() const;
bool ready() const;
Q_INVOKABLE void refreshDeviceInfo();
Q_INVOKABLE void refreshStats();
signals:
void deviceInfoChanged();
void currentDriverChanged();
void gpuSummaryChanged();
void gpuStatsChanged();
void readyChanged();
private:
void detectGpus();
void readGpuStats();
static int findDrmCard(const QString &pciId);
static QStringList runCommand(const QString &cmd, const QStringList &args);
static QString parseGpuName(const QString &line);
static QString readDriverVersion(const QString &driverName);
@@ -58,6 +72,7 @@ private:
QString m_deviceInfo;
QString m_currentDriver;
QString m_gpuSummary;
QStringList m_gpuStats;
bool m_ready;
};