feat: 移除D-Bus依赖,改用 lspci 直接检测显卡,重构弹窗UI
- C++ 后端:移除 D-Bus 通信,改用 lspci -mm + /sys/bus/pci 直接检测显卡和驱动 - 新增 gpuSummary、ready 属性,通过 /sys/module 和 /proc/driver 读取驱动版本 - QML:使用 DTK 配色,卡片式布局展示 GPU 列表,每张显卡独立卡片 - 移除安装/测试/取消按钮,聚焦显卡信息展示 - 翻译精简为 5 条,同步 zh_CN / zh_TW
This commit is contained in:
+26
-37
@@ -6,23 +6,27 @@
|
||||
|
||||
#include <applet.h>
|
||||
|
||||
#include <QDBusInterface>
|
||||
#include <QDBusPendingCallWatcher>
|
||||
#include <QString>
|
||||
#include <QStringList>
|
||||
#include <QTimer>
|
||||
#include <QJsonObject>
|
||||
#include <QJsonArray>
|
||||
|
||||
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 currentDriver READ currentDriver NOTIFY currentDriverChanged)
|
||||
Q_PROPERTY(QString deviceInfo READ deviceInfo NOTIFY deviceInfoChanged)
|
||||
Q_PROPERTY(int installProgress READ installProgress NOTIFY installProgressChanged)
|
||||
Q_PROPERTY(bool isInstalling READ isInstalling NOTIFY isInstallingChanged)
|
||||
Q_PROPERTY(bool dbusAvailable READ dbusAvailable NOTIFY dbusAvailableChanged)
|
||||
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);
|
||||
@@ -31,45 +35,30 @@ public:
|
||||
virtual bool load() override;
|
||||
virtual bool init() override;
|
||||
|
||||
QString currentDriver() const;
|
||||
QString deviceInfo() const;
|
||||
int installProgress() const;
|
||||
bool isInstalling() const;
|
||||
bool dbusAvailable() const;
|
||||
QString currentDriver() const;
|
||||
QString gpuSummary() const;
|
||||
bool ready() const;
|
||||
|
||||
Q_INVOKABLE void refreshDeviceInfo();
|
||||
Q_INVOKABLE void prepareInstall(const QString &driverName);
|
||||
Q_INVOKABLE void testInstall();
|
||||
Q_INVOKABLE void realInstall();
|
||||
Q_INVOKABLE void cancelInstall();
|
||||
|
||||
signals:
|
||||
void currentDriverChanged();
|
||||
void deviceInfoChanged();
|
||||
void installProgressChanged();
|
||||
void isInstallingChanged();
|
||||
void installSuccess();
|
||||
void installFailed(const QString &error);
|
||||
void requestReboot();
|
||||
void dbusAvailableChanged();
|
||||
|
||||
private slots:
|
||||
void onGetDeviceReply(QDBusPendingCallWatcher *call);
|
||||
void onGetCurrDriverReply(QDBusPendingCallWatcher *call);
|
||||
void onReportProgress(const QString &ratio);
|
||||
void currentDriverChanged();
|
||||
void gpuSummaryChanged();
|
||||
void readyChanged();
|
||||
|
||||
private:
|
||||
void initDBusConnection();
|
||||
void setInstalling(bool installing);
|
||||
void detectGpus();
|
||||
static QStringList runCommand(const QString &cmd, const QStringList &args);
|
||||
static QString parseGpuName(const QString &line);
|
||||
static QString readDriverVersion(const QString &driverName);
|
||||
|
||||
QDBusInterface *m_dbusInterface;
|
||||
QTimer *m_progressTimer;
|
||||
bool m_dbusAvailable;
|
||||
|
||||
QString m_currentDriver;
|
||||
QList<GpuInfo> m_gpus;
|
||||
QString m_deviceInfo;
|
||||
int m_installProgress;
|
||||
bool m_isInstalling;
|
||||
QString m_currentDriver;
|
||||
QString m_gpuSummary;
|
||||
bool m_ready;
|
||||
};
|
||||
|
||||
DS_END_NAMESPACE
|
||||
|
||||
Reference in New Issue
Block a user