<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      QT5 C++項目中實現倒計時自動關閉QMessageBox

      • 在Windows下的QT5 C++ qmake項目中,希望實現倒計時自動關閉QMessageBox。
      • 以下是基于 Qt5 C++ qmake 項目的完整實現,通過自定義 CountdownMessageBox 類(繼承自 QMessageBox),實現“倒計時顯示+自動關閉”功能,包含 .h 頭文件和 .cpp 源文件,支持自定義倒計時時長、提示文本和按鈕類型。效果見下面圖片。
      QMessageBox QT5 C++倒計時自動關閉03-out

      1. 頭文件:CountdownMessageBox.h

      定義自定義對話框類,核心邏輯包括:倒計時定時器、動態更新按鈕文本(顯示剩余時間)、自動關閉觸發。

      #ifndef COUNTDOWNMESSAGEBOX_H
      #define COUNTDOWNMESSAGEBOX_H
      
      #include <QMessageBox>
      #include <QTimer>
      #include <QString>
      
      // 繼承 QMessageBox,實現倒計時自動關閉
      class CountdownMessageBox : public QMessageBox
      {
          Q_OBJECT
      
      public:
          // 構造函數:支持自定義標題、內容、倒計時秒數、按鈕類型
          // 參數說明:
          // - title: 對話框標題
          // - text: 對話框內容(會自動追加倒計時提示)
          // - countdownSec: 倒計時秒數(默認3秒)
          // - buttons: 對話框按鈕(默認只有“確定”按鈕)
          explicit CountdownMessageBox(const QString& title, 
                                       const QString& text, 
                                       int countdownSec = 3, 
                                       StandardButtons buttons = Ok,
                                       QWidget *parent = nullptr);
      
          // 顯示對話框(重寫 show(),確保倒計時啟動時機正確)
          void show() override;
      
      private slots:
          // 倒計時定時器觸發的槽函數:更新剩余時間,到0時關閉對話框
          void onCountdownTimeout();
      
      private:
          QTimer* m_countdownTimer;  // 倒計時定時器
          int m_remainingSec;        // 剩余倒計時秒數
          QString m_originalText;    // 原始對話框內容(用于拼接倒計時文本)
          StandardButton m_defaultBtn;// 默認按鈕(倒計時結束后自動觸發該按鈕的點擊事件)
      };
      
      #endif // COUNTDOWNMESSAGEBOX_H
      

      2. 源文件:CountdownMessageBox.cpp

      實現定時器初始化、倒計時更新、自動關閉邏輯,兼容 Windows 平臺的對話框行為。

      #include "CountdownMessageBox.h"
      
      CountdownMessageBox::CountdownMessageBox(const QString& title, 
                                               const QString& text, 
                                               int countdownSec, 
                                               StandardButtons buttons,
                                               QWidget *parent)
          : QMessageBox(parent)
          , m_remainingSec(countdownSec)  // 初始化倒計時秒數
          , m_originalText(text)          // 保存原始內容(避免重復拼接)
          , m_defaultBtn(standardButton(buttons))  // 獲取默認按鈕(如 Ok)
      {
          // 1. 初始化對話框基礎屬性(標題、按鈕、圖標等)
          setWindowTitle(title);
          setStandardButtons(buttons);
          setDefaultButton(m_defaultBtn);  // 設置默認按鈕(按 Enter 可觸發)
      
          // 2. 初始化倒計時定時器
          m_countdownTimer = new QTimer(this);
          m_countdownTimer->setInterval(1000);  // 定時器間隔:1秒(1000毫秒)
          m_countdownTimer->setSingleShot(false);  // 非單次觸發(循環計時)
      
          // 3. 連接定時器信號與槽函數(每秒觸發一次倒計時更新)
          connect(m_countdownTimer, &QTimer::timeout, 
                  this, &CountdownMessageBox::onCountdownTimeout);
      
          // 4. 初始顯示:拼接原始文本和倒計時提示(如“操作成功,3秒后自動關閉...”)
          updateText();
      }
      
      // 重寫 show() 函數:顯示對話框時啟動倒計時
      void CountdownMessageBox::show()
      {
          m_countdownTimer->start();  // 啟動定時器
          QMessageBox::show();        // 調用父類 show(),顯示對話框
      }
      
      // 倒計時定時器槽函數:更新剩余時間,到0時關閉對話框
      void CountdownMessageBox::onCountdownTimeout()
      {
          // 1. 減少剩余秒數
          m_remainingSec--;
      
          // 2. 更新對話框文本(顯示最新剩余時間)
          updateText();
      
          // 3. 倒計時結束:停止定時器 + 觸發默認按鈕點擊 + 關閉對話框
          if (m_remainingSec <= 0)
          {
              m_countdownTimer->stop();  // 停止定時器
              // 模擬點擊默認按鈕(觸發對話框的 accept/reject 邏輯,確保信號正常發射)
              clickButton(m_defaultBtn);
              // 關閉對話框(若 clickButton 未觸發關閉,手動關閉)
              close();
          }
      }
      
      // 輔助函數:更新對話框文本(拼接原始內容和剩余時間)
      void CountdownMessageBox::updateText()
      {
          // 格式:原始文本 + “(X秒后自動關閉)”
          QString newText = QString("%1(%2秒后自動關閉)")
                            .arg(m_originalText)
                            .arg(m_remainingSec);
          setText(newText);
      }
      

      3. 使用示例(main.cpp)

      在項目中調用自定義的 CountdownMessageBox,支持不同場景(如成功提示、警告提示)。

      #include <QApplication>
      #include "CountdownMessageBox.h"
      
      int main(int argc, char *argv[])
      {
          QApplication a(argc, argv);
      
          // 示例1:基礎用法(3秒自動關閉,默認“確定”按鈕)
          CountdownMessageBox msg1(
              "操作成功",                // 標題
              "文件已成功保存到 D:\\Temp\\",  // 內容
              3,                        // 倒計時3秒
              QMessageBox::Ok           // 按鈕類型
          );
          msg1.setIcon(QMessageBox::Information);  // 設置圖標(信息圖標)
          msg1.exec();  // 模態顯示(也可使用 show() 非模態,根據需求選擇)
      
          // 示例2:自定義倒計時+多按鈕(5秒自動關閉,“確定”+“取消”按鈕)
          CountdownMessageBox msg2(
              "警告",                    // 標題
              "檢測到未保存的修改,是否放棄?",  // 內容
              5,                        // 倒計時5秒
              QMessageBox::Ok | QMessageBox::Cancel  // 多按鈕
          );
          msg2.setIcon(QMessageBox::Warning);  // 設置圖標(警告圖標)
          // 監聽按鈕點擊結果(即使自動關閉,也能獲取默認按鈕的結果)
          int result = msg2.exec();
          if (result == QMessageBox::Ok)
          {
              qDebug() << "用戶選擇:放棄修改(或倒計時自動觸發)";
          }
          else if (result == QMessageBox::Cancel)
          {
              qDebug() << "用戶選擇:取消操作";
          }
      
          return a.exec();
      }
      

      4. 項目配置(.pro 文件)

      確保 qmake 項目配置正確,僅需依賴 Qt 核心模塊(無需額外第三方庫)。

      QT       += core gui widgets  # 依賴 widgets 模塊(QMessageBox 屬于 widgets)
      TARGET = CountdownMsgDemo     # 項目名稱
      TEMPLATE = app                # 應用程序模板
      SOURCES += main.cpp           # 源文件
                 CountdownMessageBox.cpp
      HEADERS  += CountdownMessageBox.h  # 頭文件
      

      5. 關鍵特性說明(Windows 平臺適配)

      1. 定時器穩定性:使用 QTimer 而非 sleep,避免阻塞 UI 線程,確保對話框可正常交互(用戶可手動點擊按鈕提前關閉)。
      2. 按鈕事件兼容:倒計時結束時通過 clickButton(m_defaultBtn) 模擬按鈕點擊,而非直接 close(),確保 exec() 的返回值(如 QMessageBox::Ok)正常,與原生 QMessageBox 行為一致。
      3. 文本動態更新:通過 updateText() 函數實時刷新倒計時文本,用戶可清晰看到剩余時間。
      4. 模態/非模態支持:支持 exec()(模態,阻塞后續代碼)和 show()(非模態,不阻塞),根據業務場景選擇(如后臺操作提示用非模態,關鍵確認用模態)。

      posted on 2025-09-08 19:46  patton88  閱讀(51)  評論(0)    收藏  舉報

      導航

      主站蜘蛛池模板: 日韩亚洲精品国产第二页| 四虎国产精品永久地址99| 加勒比中文字幕无码一区| 口爆少妇在线视频免费观看| 2020年最新国产精品正在播放 | 亚洲一区无码精品色| 欧洲无码一区二区三区在线观看| 午夜国产小视频| 亚洲区一区二区激情文学| 勃利县| 视频一区视频二区在线视频| 亚洲日本乱码熟妇色精品| 中文字幕国产在线精品| 国产乱码精品一区二三区| 亚洲熟妇一区二区三个区| 国产区成人精品视频| 人妻无码久久久久久久久久久| 亚洲一区二区三区av无码| 日本东京热不卡一区二区| 国厂精品114福利电影免费| 秋霞鲁丝片成人无码| 老熟女多次高潮露脸视频| 丁香花成人电影| 亚洲中文字幕一区二区| 99RE6在线视频精品免费下载| 久久精品国产福利亚洲av| 国产亚洲精品第一综合| 亚洲中少妇久久中文字幕| 苏尼特左旗| 亚洲欧美牲交| 性一交一乱一乱一视频| 日本熟妇色xxxxx日本免费看| 91青青草视频在线观看| 国产成人精品无码片区在线观看| 亚洲啪啪精品一区二区的| 亚洲男女羞羞无遮挡久久丫| 九九久久精品国产免费看小说| 日产日韩亚洲欧美综合下载| 亚洲无线观看国产精品| 色一情一乱一区二区三区码| 二区三区亚洲精品国产|