#ifndef BLASTOPEPAGE_H #define BLASTOPEPAGE_H #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "../PageWidget.h" #include "../blastProject/hprojectdao.h" #include "../fireWidget/firingwidget.h" // 包含 firingWidget 头文件 #include "../serial/serialtool.h" #include "countdownwidget.h" #include "faceverification.h" #include "sequenceselectorwidget.h" // 自定义结构体 struct ProgressBarTriple { QProgressBar *bar1; QProgressBar *bar2; QProgressBar *bar3; // 构造函数 ProgressBarTriple(QProgressBar *b1, QProgressBar *b2, QProgressBar *b3) : bar1(b1), bar2(b2), bar3(b3) {} }; namespace Ui { class BlastOpePage; } class BlastOpePage : public QWidget { Q_OBJECT public: explicit BlastOpePage(QWidget *parent = nullptr); ~BlastOpePage(); private slots: void onComboBoxIndexChanged(int index); void updateProgressBar(int value, int row); void onFiringStageUpdated(int status, int row); void handleUpdateOpButton(int status, int row); void showCountDownWidget(QString uuid, const QString &topic, const QString &message); void handlerUpdateProjectStatus(QString uuid, const QString &status); void destroyFiringWidget(const QString &uuid, int row); void on_btnSelect_clicked(); void onItemCheckboxChanged(QStandardItem *item); void setBatchBlastTrigger(QString uuid); void showCountDownForBatchBlast(); void triggerBatchFiringBlast(); void destroyBatchFiringWidget(const QString &uuid, int row); void onSequenceSelected(const QStringList &orderedPcSnList); void onSequenceCanceled(); private: void drawTable(); void initFaceVerification(); void onFaceVerificationSuccess(); void onFaceVerificationFailed(const QString &message); void initPagination(); void handleSingleBlastButtonClicked(int row, QPushButton *button); bool checkUuidsSame(); void showSequenceSelector(); private: Ui::BlastOpePage *ui; QList headers; QStandardItemModel *model; QMap firingWidgetByUuid; FaceVerification *m_faceVerification; HProjectDao dao; QVector progressBars; // 用于保存每行的两个进度条指针 QMap uuidMap; // 用于存储行号和对应的 uuid QMap uuidWidgetSMap; QMap pcSnToFirstRowMap; // Map pcSn to its first row index for shared widgets SerialTool *serialTool; QSet selectedUuids; QMetaObject::Connection connectionItem; QMap>> m_groupedProjects; QString stopBlastButtonTxt = "取消起爆"; QString startBlastButtonTxt = "开启起爆"; QString reStartButtonTxt = "返回授权"; SequenceSelectorWidget *m_sequenceSelector; }; #endif // BLASTOPEPAGE_H