Files
JSwitchDisplayApplet/graphicsdriverapplet.h
T
Jokul 403ae8a69b feat: 添加GPU温度/使用率/显存实时监控
- C++后端:GpuInfo扩展统计字段,readGpuStats()支持NVIDIA(nvidia-smi)和AMD(sysfs)
- PCI到DRM card映射,新增gpuStats属性和refreshStats方法
- QML前端:弹窗卡片显示温度(带颜色)、GPU使用率进度条、显存使用
- 任务栏tooltip显示简洁摘要(厂商简称+温度+使用率)
- 定时刷新:弹窗和tooltip打开时每2秒刷新,关闭时停止
- 优化卡片布局:压缩高度和间距,弹窗高度调整至420px
2026-07-13 23:08:08 +08:00

80 lines
2.3 KiB
C++
Raw Permalink 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.
// SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: GPL-3.0-or-later
#pragma once
#include <applet.h>
#include <QString>
#include <QStringList>
#include <QTimer>
DS_BEGIN_NAMESPACE
struct GpuInfo {
QString name; // 显卡名称,如 "NVIDIA GeForce RTX 3060"
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
{
Q_OBJECT
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:
explicit GraphicsDriverApplet(QObject *parent = nullptr);
~GraphicsDriverApplet();
virtual bool load() override;
virtual bool init() override;
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);
QList<GpuInfo> m_gpus;
QString m_deviceInfo;
QString m_currentDriver;
QString m_gpuSummary;
QStringList m_gpuStats;
bool m_ready;
};
DS_END_NAMESPACE