浏览代码

dev: some tweaks

Yao 1 月之前
父节点
当前提交
fade9ff397

+ 3 - 2
blastProject/blastprojectpage.cpp

@@ -97,6 +97,8 @@ void BlastProjectPage::loadDataFromSource(int currentPage, int pageSize) {
 
             } else {
                 item = new QStandardItem("操作");
+                item->setTextAlignment(Qt::AlignCenter);
+                item->setData(QSize(30, 30), Qt::SizeHintRole);
             }
             if (item) {
                 item->setTextAlignment(Qt::AlignCenter);
@@ -164,7 +166,7 @@ void BlastProjectPage::addressOptions(const QJsonArray &dataArrayAddress) {
     // dialog->setChildOptions(dataArrayAddress);
 }
 
-// 递归函数,用于提取所有的 name 信
+// 递归函数,用于提取所有的 name 信bian'ji
 void BlastProjectPage::extractNames(const QJsonArray &array, QStringList &names) {
     for (const auto &item : array) {
         if (item.isObject()) {
@@ -193,7 +195,6 @@ void BlastProjectPage::on_pushButton_clicked() {
 }
 
 void BlastProjectPage::insertPlan(const QMap<QString, QString> &data) {
-    qDebug() << "insertPlan called with data:" << data;
     HProject project;
     project.setName(data.value("name"));
     project.setDetSum(data.value("detNum"));

+ 6 - 0
blastProject/projectdialog.cpp

@@ -1,5 +1,7 @@
 #include "projectdialog.h"
 
+#include <QPushButton>
+
 #include "ui_projectdialog.h"
 
 ProjectDialog::ProjectDialog(QWidget *parent) : QDialog(parent), ui(new Ui::ProjectDialog) {
@@ -215,10 +217,14 @@ void ProjectDialog::setOperationStatus(int newOperationStatus) { operationStatus
 
 void ProjectDialog::setFormData(const HProject &Project) {
     try {
+        // hide the accept button
+        ui->buttonBox->button(QDialogButtonBox::Ok)->setVisible(false);
+
         ui->editName->setText(Project.getName());
         ui->editDetNum->setText(Project.getDetSum());
         ui->editHTID->setText(Project.getHtid());
         ui->editXMBH->setText(Project.getXmbh());
+        ui->editRegCount->setText(Project.getBlastCount());
         int indexBlast = ui->comboBoxBlast->findText(Project.getBlasterName());
         if (indexBlast != -1) {
             ui->comboBoxBlast->setCurrentIndex(indexBlast);

+ 38 - 9
blastopepage.cpp

@@ -15,6 +15,7 @@
 const int ColIndexBlastStatus = 7;
 const int ColIndexProgressBar = 8;
 const int ColIndexOpBtn = 9;
+const int ColIndexUuid = 10;
 
 BlastOpePage::BlastOpePage(QWidget *parent)
     : QWidget(parent), ui(new Ui::BlastOpePage), dao(DatabaseManager::getInstance().getDatabase()) {
@@ -412,7 +413,7 @@ void BlastOpePage::loadDataAndDrawTable(int currentPage, int pageSize) {
         if (index.isValid()) {
             ui->tableView->setIndexWidget(index, widget);
             connect(button, &QPushButton::clicked,
-                    [this, row, button]() { handleSingleBlastButtonClick(row, button); });
+                    [this, row, button]() { handleSingleBlastButtonClicked(row, button); });
         }
     }
 }
@@ -538,11 +539,11 @@ void BlastOpePage::onFiringStageUpdated(int stage, int row) {
     }
 
     updateProgressBar(stage, row);
-    updateOpBtnStage(stage, row);
+    handleUpdateOpButton(stage, row);
 }
 
-void BlastOpePage::handleSingleBlastButtonClick(int row, QPushButton *button) {
-    QStandardItem *uuidItem = model->item(row, ColIndexOpBtn);
+void BlastOpePage::handleSingleBlastButtonClicked(int row, QPushButton *button) {
+    QStandardItem *uuidItem = model->item(row, ColIndexUuid);
     QString uuid;
     if (uuidItem) {
         QVariant uuidVariant = uuidItem->data(Qt::UserRole);
@@ -552,6 +553,13 @@ void BlastOpePage::handleSingleBlastButtonClick(int row, QPushButton *button) {
     }
 
     if (button->text() == startBlastButtonTxt) {
+        button->setDisabled(true);
+        QTimer::singleShot(5000, [button]() {
+            if (button->isEnabled()) {
+                return;
+            }
+            button->setEnabled(true);
+        });
         button->setMinimumWidth(80);
         button->setText(stopBlastButtonTxt);
         firingWidget *widget = new firingWidget(row, false, uuid);
@@ -565,17 +573,34 @@ void BlastOpePage::handleSingleBlastButtonClick(int row, QPushButton *button) {
 
         widget->setAttribute(Qt::WA_DeleteOnClose);
         firingWidgetByUuid.insert(uuid, widget);
+        widget->startBlasting();
 
     } else if (button->text() == stopBlastButtonTxt) {
+        // TODO: wrap into class
+        QMessageBox msgBox;
+        msgBox.setWindowTitle("提示");
+        msgBox.setText("是否取消爆破?");
+        QPushButton *yesButton = msgBox.addButton("是", QMessageBox::YesRole);
+        QPushButton *noButton = msgBox.addButton("否", QMessageBox::NoRole);
+        yesButton->setStyleSheet(
+            "QPushButton { background-color:rgb(5, 58, 156); color: white; padding: 5px 15px; "
+            "border-radius: 4px; }");
+        noButton->setStyleSheet(
+            "QPushButton { background-color: #f44336; color: white; padding: 5px 15px; "
+            "border-radius: 4px; }");
+        msgBox.exec();
+        if (msgBox.clickedButton() == noButton) {
+            return;
+        }
+
         firingWidget *widget = firingWidgetByUuid.value(uuid);
         if (widget) {
             widget->sendCancelFiringMsg();
         }
-        button->setText("...");
     }
 }
 
-void BlastOpePage::updateOpBtnStage(int stage, int row) {
+void BlastOpePage::handleUpdateOpButton(int stage, int row) {
     QModelIndex index = model->index(row, ColIndexOpBtn);
     if (!index.isValid()) {
         Logger::getInstance().error(QString("can not get updateOpBtnStage index %1").arg(row));
@@ -591,24 +616,27 @@ void BlastOpePage::updateOpBtnStage(int stage, int row) {
 
     switch (stage) {
         case FiringStages::Starting:
-            button->setText(stopBlastButtonTxt);
             button->setDisabled(true);
             break;
         case FiringStages::QuickTesting:
             button->setEnabled(true);
+            button->setText(stopBlastButtonTxt);
             break;
         case FiringStages::QuickTestFinished:
             button->setEnabled(true);
+            button->setText(stopBlastButtonTxt);
             break;
         case FiringStages::NetCharging:
             button->setEnabled(true);
+            button->setText(stopBlastButtonTxt);
             break;
         case FiringStages::NetChargingFinished:
             button->setEnabled(true);
+            button->setText(stopBlastButtonTxt);
             break;
         case FiringStages::PendingTriggerButtonClick:
-            button->setText(stopBlastButtonTxt);
             button->setEnabled(true);
+            button->setText(stopBlastButtonTxt);
             break;
         case FiringStages::Blasting:
             button->setDisabled(true);
@@ -691,7 +719,7 @@ void BlastOpePage::on_btnSelect_clicked() {
         int row = it.key();
         QString uuid = it.value();
         firingWidget *widgetSelect = new firingWidget(row, true, uuid);
-        QModelIndex index = model->index(row, ColIndexOpBtn);
+        QModelIndex index = model->index(row, ColIndexUuid);
         if (index.isValid()) {
             QWidget *widgetButton = ui->tableView->indexWidget(index);
             if (widgetButton) {
@@ -708,6 +736,7 @@ void BlastOpePage::on_btnSelect_clicked() {
         connect(widgetSelect, &firingWidget::closeFiring, this, &BlastOpePage::destroyBatchFiringWidget);
         widgetSelect->setAttribute(Qt::WA_DeleteOnClose);
         uuidWidgetSMap.insert(uuid, widgetSelect);
+        widgetSelect->startBlasting();
 
         if (isShowTriggeringWidget) {
             widgetSelect->show();

+ 2 - 2
blastopepage.h

@@ -46,7 +46,7 @@ class BlastOpePage : public QWidget {
     void onComboBoxIndexChanged(int index);
     void updateProgressBar(int value, int row);
     void onFiringStageUpdated(int status, int row);
-    void updateOpBtnStage(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);
@@ -68,7 +68,7 @@ class BlastOpePage : public QWidget {
     void initPagination();
     QJsonObject sendPostRequest(const QUrl &url, const QJsonObject &data);
     QJsonObject getMetaInfo();
-    void handleSingleBlastButtonClick(int row, QPushButton *button);
+    void handleSingleBlastButtonClicked(int row, QPushButton *button);
     bool checkUuidsSame();
 
    private:

+ 1 - 1
buttondelegate.cpp

@@ -23,7 +23,7 @@ void ButtonDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option
 
         // 第二个按钮
         buttonOption2.rect = rect.adjusted(rect.width() / 2, 0, 0, 0);
-        buttonOption2.text = "编辑";  // 按钮文本
+        buttonOption2.text = "查看";  // 按钮文本
         buttonOption2.state = QStyle::State_Enabled;
         QApplication::style()->drawControl(QStyle::CE_PushButton, &buttonOption2, painter);
     } else {

+ 9 - 8
fireWidget/firingwidget.cpp

@@ -46,17 +46,18 @@ firingWidget::firingWidget(const int &row, const bool &select, const QString &uu
     mqttThread = new MqttThread(this);
     m_topic = "hxgc/" + uuid + "/B";
     QStringList topics = {m_topic};
-    mqttThread->setConnectionInfo("114.55.233.194", 1883, "hxgc", "hxgc123456", "P" + uuid, topics);
+    m_connectionCheckTimer = new QTimer(this);
+    mqttThread->setConnectionInfo("114.55.233.194", 1883, "hxgc", "hxgc123456", "aP" + uuid, topics);
     connect(mqttThread, &MqttThread::mqttConnected, this, &firingWidget::onMqttConnected);
     connect(mqttThread, &MqttThread::mqttDisconnected, this, &firingWidget::onMqttDisconnected);
     mqttThread->start();
     connect(mqttThread, &MqttThread::projectMqttMessageReceived, this, &firingWidget::handleProjectFiringMqttMessage);
     connect(this, &firingWidget::lastStageChanged, this, &firingWidget::handleFiringStageChanged);
     connect(this, &firingWidget::updateData, this, &firingWidget::onBlastSuccess);
-    startBlasting();
 }
 
 firingWidget::~firingWidget() {
+    m_connectionCheckTimer->deleteLater();
     mqttThread->stopThread();
     mqttThread->wait();
     qDebug() << "firingWidget::~firingWidget()";
@@ -67,6 +68,7 @@ void firingWidget::sendMqttMessage(const QString &topic, const QByteArray &messa
     if (mqttThread && m_isMqttConnected) {
         emit mqttThread->sendMessageRequested(topic, message, quint8(2), false);
     } else {
+        QMessageBox::warning(this, "MQTT未连接", "MQTT未连接, 无法发送消息: " + topic + ", " + message);
         Logger::getInstance().error("MQTT未连接, 无法发送消息" + topic + ", " + message);
     }
 }
@@ -80,14 +82,13 @@ void firingWidget::startBlasting() {
     });
 }
 
-// 检查有没有收到爆破器的消
+// 定间隔检查有没有收到爆破器返回信息
 void firingWidget::checkBlasterConnection() {
     m_lastMsgTime = QDateTime::currentDateTime();
-    QTimer *timer = new QTimer(this);
     connect(mqttThread, &MqttThread::projectMqttMessageReceived, this,
             [&]() { m_lastMsgTime = QDateTime::currentDateTime(); });
 
-    connect(timer, &QTimer::timeout, this, [this, timer]() {
+    connect(m_connectionCheckTimer, &QTimer::timeout, this, [this]() {
         if (m_lastStage == FiringStages::CancelConfirmed || m_lastStage == FiringStages::BlastFinished) {
             return;
         }
@@ -105,8 +106,7 @@ void firingWidget::checkBlasterConnection() {
                 "border-radius: 4px; }");
             msgBox.exec();
             if (msgBox.clickedButton() == noButton) {
-                timer->stop();
-                timer->deleteLater();
+                m_connectionCheckTimer->stop();
                 sendCancelFiringMsg();
                 emit closeFiring(m_curProjUuid);
                 return;
@@ -114,7 +114,7 @@ void firingWidget::checkBlasterConnection() {
         }
     });
 
-    timer->start(5000);  // 每10秒检查一次
+    m_connectionCheckTimer->start(5000);
 }
 void firingWidget::on_pushButton_2_clicked() { emit countdown(m_curProjUuid, m_topic, "message"); }
 
@@ -441,6 +441,7 @@ void firingWidget::onBlastSuccess(const QJsonObject &jsonObj) {
 }
 
 void firingWidget::saveAndUploadRecord(const QJsonObject &jsonObj) {
+    return;  // changed to use server to save the record
     QSqlDatabase db = DatabaseManager::getInstance().getDatabase();
     if (!db.transaction()) {
         Logger::getInstance().critical(QString("Failed to start DB transaction. Error: %1").arg(db.lastError().text()));

+ 2 - 1
fireWidget/firingwidget.h

@@ -41,6 +41,7 @@ class firingWidget : public QWidget {
     ~firingWidget();
     void sendCancelFiringMsg();
     void testOnBlastSuccess(const QJsonObject &data);
+    void startBlasting();
 
    public slots:
     void onCountdownFinished(const QString &topic, const QString &message);
@@ -78,7 +79,6 @@ class firingWidget : public QWidget {
     bool uploadToDanLing(const QJsonObject &jsonObj);
     void saveAndUploadRecord(const QJsonObject &jsonObj);
     void sendMqttMessage(const QString &topic, const QByteArray &message);
-    void startBlasting();
     void onSafeChecked(const QString projectUuid);
     void checkBlasterConnection();
 
@@ -102,6 +102,7 @@ class firingWidget : public QWidget {
     QString m_latitude;
     QString m_longitude;
     QDateTime m_lastMsgTime;
+    QTimer *m_connectionCheckTimer;
 };
 
 #endif  // FIRINGWIDGET_H

+ 2 - 0
mqtt/mqttclient.cpp

@@ -118,6 +118,7 @@ void MqttClient::onStateChanged(QMqttClient::ClientState state) {
             } else {
                 Logger::getInstance().error("Mqtt reconnect failed after 3 attempts");
                 QMessageBox::warning(nullptr, "提示", "mqtt连接已断开,请重新登录");
+                emit disConnected();
             }
             break;
         case QMqttClient::ClientState::Connecting:
@@ -126,6 +127,7 @@ void MqttClient::onStateChanged(QMqttClient::ClientState state) {
         case QMqttClient::ClientState::Connected:
             m_connectRetryCount = 0;  // 重置连接重试计数
             qDebug() << "MQTT 客户端状态: 已连接";
+            emit connected();
             break;
         default:
             Logger::getInstance().info("Mqtt unkown state: " + QString::number(state));