#pragma once #include #include #include #include #include #include #include #include "downloadmanager.h" struct DownloadInfo { int progress = 0; bool isDownloading = false; bool isInstalled = false; bool isInstalling = false; }; class AppDelegate : public QStyledItemDelegate { Q_OBJECT public: explicit AppDelegate(QObject *parent = nullptr); void setModel(QAbstractItemModel *model); void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override; QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const override; bool editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index) override; void startDownloadForAll(); void startDownloadForSelected(); // 复选框相关方法 void setSelectedPackages(const QSet &selected); QSet getSelectedPackages() const; void clearSelection(); // 获取下载状态信息 const QHash& getDownloads() const; signals: void updateDisplay(const QString &packageName); void updateFinished(bool success); //传递是否完成更新 void ignoreApp(const QString &packageName, const QString &version); // 新增:忽略应用信号 void unignoreApp(const QString &packageName); // 新增:取消忽略应用信号 private slots: void updateSpinner(); // 新增槽函数 private: DownloadManager *m_downloadManager; QHash m_downloads; QAbstractItemModel *m_model = nullptr; // 复选框相关成员变量 QSet m_selectedPackages; QQueue m_installQueue; bool m_isInstalling = false; QProcess *m_installProcess = nullptr; QString m_installingPackage; QElapsedTimer m_spinnerTimer; QTimer m_spinnerUpdateTimer; // 新增定时器 int m_spinnerAngle = 0; // 新增角度变量 void enqueueInstall(const QString &packageName); void startNextInstall(); };