// SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #pragma once #include #include #include #include DS_BEGIN_NAMESPACE struct GpuInfo { QString name; // 显卡名称,如 "NVIDIA GeForce RTX 3060" QString driver; // 驱动模块名,如 "nvidia" QString driverVersion; // 驱动版本 QString pciId; // PCI ID,如 "01:00.0" }; 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(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; bool ready() const; Q_INVOKABLE void refreshDeviceInfo(); signals: void deviceInfoChanged(); void currentDriverChanged(); void gpuSummaryChanged(); void readyChanged(); private: void detectGpus(); static QStringList runCommand(const QString &cmd, const QStringList &args); static QString parseGpuName(const QString &line); static QString readDriverVersion(const QString &driverName); QList m_gpus; QString m_deviceInfo; QString m_currentDriver; QString m_gpuSummary; bool m_ready; }; DS_END_NAMESPACE