浏览代码

Revert "update: release page when changed"

This reverts commit 5bc2cb26311980381a7a8b2ad9c62bac1347da74.
YaoH 3 周之前
父节点
当前提交
e0618f0986
共有 3 个文件被更改,包括 26 次插入90 次删除
  1. 24 87
      blastopepage.cpp
  2. 2 2
      blastopepage.h
  3. 0 1
      mainwindow.cpp

+ 24 - 87
blastopepage.cpp

@@ -1,7 +1,5 @@
 #include "blastopepage.h"
 #include "blastopepage.h"
 
 
-#include <QtCore/qlogging.h>
-
 #include <QFont>
 #include <QFont>
 #include <QProcessEnvironment>
 #include <QProcessEnvironment>
 #include <QWebEngineSettings>
 #include <QWebEngineSettings>
@@ -53,24 +51,16 @@ void BlastOpePage::InitFace() {
     Logger::getInstance().info("start init face verification");
     Logger::getInstance().info("start init face verification");
     LoadingWidget::showLoading(this, "请求创建人脸识别...");
     LoadingWidget::showLoading(this, "请求创建人脸识别...");
 
 
-    m_faceVerifyLayout = new QVBoxLayout(this);
-    // Create new WebEngineView
-    m_faceverifyWebView = new QWebEngineView(this);
-    m_faceverifyWebView->setAttribute(Qt::WA_OpaquePaintEvent);
-
-    // Configure web settings for better performance
-    QWebEngineSettings *settings = m_faceverifyWebView->settings();
-    settings->setAttribute(QWebEngineSettings::JavascriptEnabled, true);
-    settings->setAttribute(QWebEngineSettings::LocalStorageEnabled, true);
-    settings->setAttribute(QWebEngineSettings::FullScreenSupportEnabled, true);
+    layout = new QVBoxLayout(this);
+    // TODO: relase the qwebengineview when not successfully verified
+    view = new QWebEngineView(this);
+    view->setAttribute(Qt::WA_OpaquePaintEvent);
 
 
-    QWebEnginePage *page = m_faceverifyWebView->page();
+    QWebEnginePage *page = view->page();
 
 
     QJsonObject metaInfo = getMetaInfo();
     QJsonObject metaInfo = getMetaInfo();
     if (metaInfo["certName"] == "" || metaInfo["certNo"] == "") {
     if (metaInfo["certName"] == "" || metaInfo["certNo"] == "") {
         QMessageBox::information(nullptr, "获取用户信息错误", "未获得用户的身份证信息,请联系管理员");
         QMessageBox::information(nullptr, "获取用户信息错误", "未获得用户的身份证信息,请联系管理员");
-        LoadingWidget::hideLoading();
-        closeWebViewAndRestoreUI();  // Clean up on error
         return;
         return;
     }
     }
 
 
@@ -88,8 +78,6 @@ void BlastOpePage::InitFace() {
             QString("创建人脸识别请求服务器返回错误: userName: %1. response: %2")
             QString("创建人脸识别请求服务器返回错误: userName: %1. response: %2")
                 .arg(metaInfo["certName"].toString(), QString::fromUtf8(QJsonDocument(response).toJson())));
                 .arg(metaInfo["certName"].toString(), QString::fromUtf8(QJsonDocument(response).toJson())));
         QMessageBox::critical(nullptr, "错误", "无法创建人脸识别,请确认后台录入的身份信息正确");
         QMessageBox::critical(nullptr, "错误", "无法创建人脸识别,请确认后台录入的身份信息正确");
-        LoadingWidget::hideLoading();
-        closeWebViewAndRestoreUI();  // Clean up on error
         return;
         return;
     }
     }
     if (response.contains("data") && response["data"].isObject()) {
     if (response.contains("data") && response["data"].isObject()) {
@@ -106,77 +94,29 @@ void BlastOpePage::InitFace() {
         }
         }
     }
     }
     if (!certifyUrl.isEmpty()) {
     if (!certifyUrl.isEmpty()) {
-        LoadingWidget::showLoading(this, "加载人脸识别页面...");
-
-        // Handle page load events
-        QObject::connect(m_faceverifyWebView, &QWebEngineView::loadStarted, this,
-                         [this]() { qDebug() << "Face verification page loading started"; });
-
-        QObject::connect(m_faceverifyWebView, &QWebEngineView::loadFinished, this, [this](bool success) {
-            if (!success) {
-                Logger::getInstance().error("Face verification page failed to load");
-                QMessageBox::warning(nullptr, "加载失败", "人脸识别页面加载失败,请重试");
-                LoadingWidget::hideLoading();
-                closeWebViewAndRestoreUI();
-                return;
-            }
-            qDebug() << "Face verification page loaded successfully";
-            LoadingWidget::hideLoading();
-        });
+        view->load(QUrl(certifyUrl));
+
+        layout->addWidget(view);
 
 
-        // Load URL and add to layout
-        m_faceverifyWebView->load(QUrl(certifyUrl));
-        m_faceVerifyLayout->addWidget(m_faceverifyWebView);
-        m_faceVerifyLayout->setStretchFactor(m_faceverifyWebView, 1);
+        layout->setStretchFactor(view, 1);
 
 
-        // Connect URL change signal
         QObject::connect(page, &QWebEnginePage::urlChanged, this, &BlastOpePage::onUrlChanged);
         QObject::connect(page, &QWebEnginePage::urlChanged, this, &BlastOpePage::onUrlChanged);
     } else {
     } else {
         QMessageBox::information(nullptr, "提示", "人脸识别请求失败");
         QMessageBox::information(nullptr, "提示", "人脸识别请求失败");
         Logger::getInstance().error("FaceVerificationInit: Failed to get certifyUrl");
         Logger::getInstance().error("FaceVerificationInit: Failed to get certifyUrl");
         LoadingWidget::hideLoading();
         LoadingWidget::hideLoading();
-        closeWebViewAndRestoreUI();  // Clean up on error
     }
     }
 }
 }
 
 
 void BlastOpePage::closeWebViewAndRestoreUI() {
 void BlastOpePage::closeWebViewAndRestoreUI() {
-    // Safely disconnect signals first
-    if (m_faceverifyWebView) {
-        // Disconnect specific signals instead of wildcard disconnect
-        if (m_faceverifyWebView->page()) {
-            QWebEnginePage *page = m_faceverifyWebView->page();
-            // Disconnect specific signals to avoid wildcard issues
-            QObject::disconnect(page, &QWebEnginePage::featurePermissionRequested, this, nullptr);
-            QObject::disconnect(page, &QWebEnginePage::urlChanged, this, nullptr);
-        }
-
-        // Stop any ongoing operations
-        m_faceverifyWebView->stop();
-
-        // Remove from layout before deleting
-        if (m_faceVerifyLayout) {
-            m_faceVerifyLayout->removeWidget(m_faceverifyWebView);
-        }
-
-        // Clean up the web view
-        m_faceverifyWebView->setParent(nullptr);
-        m_faceverifyWebView->deleteLater();
-        m_faceverifyWebView = nullptr;
+    if (view) {
+        layout->removeWidget(view);
+        delete view;
+        view = nullptr;
     }
     }
-
-    if (m_faceVerifyLayout) {
-        // Clear all layout items properly
-        QLayoutItem *item;
-        while ((item = m_faceVerifyLayout->takeAt(0)) != nullptr) {
-            if (QWidget *widget = item->widget()) {
-                widget->setParent(nullptr);
-            }
-            delete item;
-        }
-
-        // Delete layout
-        delete m_faceVerifyLayout;
-        m_faceVerifyLayout = nullptr;
+    if (layout) {
+        delete layout;
+        layout = nullptr;
     }
     }
 }
 }
 
 
@@ -184,6 +124,7 @@ void BlastOpePage::closeWebViewAndRestoreUI() {
 void BlastOpePage::onUrlChanged(const QUrl &newUrl) {
 void BlastOpePage::onUrlChanged(const QUrl &newUrl) {
     LoadingWidget::showLoading(this, "查询验证结果...");
     LoadingWidget::showLoading(this, "查询验证结果...");
     if (newUrl.host() == "www.integrateblaster.com") {
     if (newUrl.host() == "www.integrateblaster.com") {
+        closeWebViewAndRestoreUI();
         QNetworkAccessManager manager;
         QNetworkAccessManager manager;
         QUrl requestUrl(apiBackendUrl.resolved(QUrl(QString("h-face-verify/certifyId/%1").arg(certifyId))));
         QUrl requestUrl(apiBackendUrl.resolved(QUrl(QString("h-face-verify/certifyId/%1").arg(certifyId))));
         QNetworkRequest request(requestUrl);
         QNetworkRequest request(requestUrl);
@@ -204,25 +145,19 @@ void BlastOpePage::onUrlChanged(const QUrl &newUrl) {
                     Logger::getInstance().error(QString("获取认证初始化数据失败. message: %1.").arg(message));
                     Logger::getInstance().error(QString("获取认证初始化数据失败. message: %1.").arg(message));
                     int ret = QMessageBox::information(nullptr, "认证失败", message + " ,请重新认证!");
                     int ret = QMessageBox::information(nullptr, "认证失败", message + " ,请重新认证!");
                     if (ret == QMessageBox::Ok) {
                     if (ret == QMessageBox::Ok) {
-                        LoadingWidget::hideLoading();
                         InitFace();
                         InitFace();
-                        return;
                     }
                     }
                 } else {
                 } else {
                     QString passed = resultObj["Passed"].toString();
                     QString passed = resultObj["Passed"].toString();
                     if (passed == "T") {
                     if (passed == "T") {
-                        closeWebViewAndRestoreUI();  // Clean up web view first
                         ui->setupUi(this);
                         ui->setupUi(this);
                         initPagination();
                         initPagination();
                         Logger::getInstance().info(QString("进入认证界面"));
                         Logger::getInstance().info(QString("进入认证界面"));
                         LoadingWidget::hideLoading();
                         LoadingWidget::hideLoading();
-                        return;  // Early return to avoid duplicate cleanup
                     } else if (passed == "F") {
                     } else if (passed == "F") {
                         int ret = QMessageBox::critical(nullptr, "提示", "操作失败,请重新认证!");
                         int ret = QMessageBox::critical(nullptr, "提示", "操作失败,请重新认证!");
                         if (ret == QMessageBox::Ok) {
                         if (ret == QMessageBox::Ok) {
-                            LoadingWidget::hideLoading();
                             InitFace();
                             InitFace();
-                            return;
                         }
                         }
                     }
                     }
                 }
                 }
@@ -236,16 +171,18 @@ void BlastOpePage::onUrlChanged(const QUrl &newUrl) {
         reply->deleteLater();
         reply->deleteLater();
         LoadingWidget::hideLoading();
         LoadingWidget::hideLoading();
     }
     }
-    closeWebViewAndRestoreUI();
     LoadingWidget::hideLoading();
     LoadingWidget::hideLoading();
 }
 }
 
 
 BlastOpePage::~BlastOpePage() {
 BlastOpePage::~BlastOpePage() {
-    // Clean up web resources first
-    closeWebViewAndRestoreUI();
-
-    // Clean up other resources
     delete ui;
     delete ui;
+
+    if (view) {
+        delete view;
+    }
+    if (layout) {
+        delete layout;
+    }
 }
 }
 
 
 QJsonObject BlastOpePage::sendPostRequest(const QUrl &url, const QJsonObject &data) {
 QJsonObject BlastOpePage::sendPostRequest(const QUrl &url, const QJsonObject &data) {

+ 2 - 2
blastopepage.h

@@ -76,8 +76,8 @@ class BlastOpePage : public QWidget {
     QList<HeaderInfo> headers;
     QList<HeaderInfo> headers;
     QStandardItemModel *model;
     QStandardItemModel *model;
     QMap<QString, firingWidget *> firingWidgetByUuid;
     QMap<QString, firingWidget *> firingWidgetByUuid;
-    QWebEngineView *m_faceverifyWebView;
-    QVBoxLayout *m_faceVerifyLayout;
+    QWebEngineView *view;
+    QVBoxLayout *layout;
     QString certifyId;
     QString certifyId;
     PageWidget *pageWidget;
     PageWidget *pageWidget;
     QJsonArray dataArray;
     QJsonArray dataArray;

+ 0 - 1
mainwindow.cpp

@@ -120,7 +120,6 @@ void MainWindow::switchPage(QWidget *button) {
             existingPage->hide();
             existingPage->hide();
             ui->stackedWidget->removeWidget(existingPage);
             ui->stackedWidget->removeWidget(existingPage);
             createdPageByButton.remove(button);
             createdPageByButton.remove(button);
-            delete existingPage;  // 删除旧页面
         }
         }
 
 
         QWidget *newPage = factory->createPage(this);
         QWidget *newPage = factory->createPage(this);