QT6 源,七章對話框與多窗體(11) 進度對話框 QProgressDialog:屬性,公共成員函數,槽函數,信號函數,與源代碼帶注釋

(1) 本類的繼承關系

在這里插入圖片描述

++可見,進度對話框,也是 QDialog 的子類,在其上面又擺放了一些控件,構成了不同用途的對話框。咱們也可以自定義對話框。只是沒有 QT 官方大師們做的好。 人家在定義這 6 個子對話框的時候,還加入了屬性 property 、信號函數、槽函數、靜態函數等,整的很復雜,很全面。由此, QT 官方提供了這 6 種通用對話框,以滿足最高頻率的使用需求。

在這里插入圖片描述

(2)給出本類的測試舉例

在這里插入圖片描述

(3)

在這里插入圖片描述

(4)

在這里插入圖片描述

(5)

在這里插入圖片描述

(6)

在這里插入圖片描述

(7)本源代碼定義于頭文件 qprogressdialog . h

#ifndef QPROGRESSDIALOG_H
#define QPROGRESSDIALOG_H#include <QtWidgets/qtwidgetsglobal.h>#include <QtWidgets/qdialog.h>QT_REQUIRE_CONFIG(progressdialog);QT_BEGIN_NAMESPACEclass QPushButton;
class QLabel;
class QProgressBar;
class QTimer;
class QProgressDialogPrivate;/*
The QProgressDialog class provides feedback on the progress of a slow operation.Detailed Description:
進度對話框用于向用戶顯示某個操作將耗時多久,并表明應用程序并未凍結。
它還可以為用戶提供中止操作的機會。進度對話框的一個常見問題在于難以確定何時使用它們;不同硬件上操作所需的時間各不相同。
QProgressDialog提供了一種解決方案:它估計操作所需的時間(基于步驟所需時間),
并且僅在估計時間超過minimumDuration()(默認為4秒)時才顯示自身。使用`setMinimum()和`setMaximum方法或構造函數來設置操作中的“步驟數量,
并在操作進行過程中調用`setValue()、方法。
步驟數量可以任意選擇,可以是復制的文件數量、接收的字節數、算法主循環中的迭代次數,或者其他合適的單位。
進度從`setinimum()、設定的值開始,
當您調用`setValue()、方法并將由setMaximum()、設定的值作為參數時,這進度對話框將顯示操作已完成。該對話框會在操作結束時自動重置并隱藏自身。使用`setAutoReset()、和`setAutoClose來改變這一行為。請注意,如果您設置了新的最大值(使用setMaximum()或setRange()、),且該值等于當前值,
則對話框將無論如何都不會關閉。使用QProgressDialog有兩種方式:模態和非態。
與無模態的 QProgressDialog相比,模態的 QProgressDialog 對于程序員來說使用起來更為簡單。可以在循環中進行操作,在循環中調用setValue()方法,并通過wasCanceled()方法檢查是否被取消。例如:QProgressDialog progress("Copying files...", "Abort Copy", 0, numFiles, this);progress.setWindowModality(Qt::WindowModal);for (int i = 0; i < numFiles; i++) {progress.setValue(i);if (progress.wasCanceled())break;//... copy one file  //復制文件的進度對話框}progress.setValue(numFiles); //最后一次賦值,達到最大值。無模態進度對話框適用于在后臺進行的操作,此時用戶能夠與應用程序進行交互。
此類操作通常基于QTimer(或Q0bject:timerEvent())或QSocketNotifier;或者是在單獨的線程中執行。主窗口狀態欄中的 QProgressBar往往是無模態進度對話框的替代方案。你需要有一個事件循環在運行,將“取消cancel”信號連接到停止操作的槽函數,并定時調用setValue”函數。例如://  Operation constructor 一個構造函數Operation::Operation(QObject * parent) : QObject(parent), steps(0){   pd = new QProgressDialog("Operation in progress.", "Cancel", 0, 100);connect(pd, &QProgressDialog::canceled, this, &Operation::cancel);t = new QTimer(this);connect(t, &QTimer::timeout, this, &Operation::perform);t->start(0);}void Operation::perform(){   pd->setValue(steps); //更新進度對話框的值//... perform one percent of the operationsteps++;if (steps > pd->maximum())t->stop();       //超限后停止進度對話框}void Operation::cancel(){   t->stop();//... cleanup}在這兩種模式下,可以通過使用`setLabel()、setBar()和`setCancelButton()來替換子小部件,
從而自定義進度對話框。
setLabelText()和`setCancelButtonText()、函數用于設置顯示的文本。*/class Q_WIDGETS_EXPORT QProgressDialog : public QDialog
{Q_OBJECTQ_DECLARE_PRIVATE(QProgressDialog)Q_PROPERTY(QString   labelText   //此屬性持有標簽的文本。默認文本為空字符串。READ     labelText   WRITE   setLabelText)/*此屬性保存了當前完成的進度量。為使進度對話框按預期工作,您應先將此屬性設置為、QProgressDialog::minimum(),最后再設置為 QProgressDialog::maximum()、;您可以在兩者之間多次調用`setValue()、方法。警告:如果進度對話框是模態的(參見QProgressDialog::QProgressDialog()),則setValue()調用 QCoreApplication::processEvents(),因此請留意不要在你的代碼中導致不期望的重入。例如,不要在paintEvent()內部使用 QProgressDialog。*/Q_PROPERTY(int value   READ value   WRITE setValue  )//此屬性表示進度條所代表的最低值。默認值為  0。Q_PROPERTY(int minimum READ minimum WRITE setMinimum)//此屬性持有進度條 表示的最高值。 默認值為100。Q_PROPERTY(int maximum READ maximum WRITE setMaximum)//此屬性表示對話框是否被取消Q_PROPERTY(bool wasCanceled READ  wasCanceled)//此屬性表示當value()等于最大值時,進度對話框是否立即調用reset()。默認值為true。Q_PROPERTY(bool autoReset   READ  autoReset    WRITE  setAutoReset)//此屬性表示對話框是否被 reset()隱藏。默認值為true。Q_PROPERTY(bool autoClose   READ  autoClose    WRITE  setAutoClose)Q_PROPERTY(int     minimumDurationREAD   minimumDuration   WRITE   setMinimumDuration)/*此屬性表示對話框出現前必須經過的時間。如果任務的預期持續時間短于“最小持續時間”,則對話框將完全不會顯示。這可以避免在任務很快結束時就彈出對話框。對于預期持續時間將超過“最小持續時間”的任務,對話框將在“最小持續時間”時間過后或一旦設定任何進度時彈出。如果設置為0,一旦有任何進度就始終顯示對話框。默認值是4000毫秒。*/protected:void   showEvent(QShowEvent   * event) override;void changeEvent(QEvent       * event) override;void resizeEvent(QResizeEvent * event) override;void  closeEvent(QCloseEvent  * event) override;private:Q_DISABLE_COPY(QProgressDialog)Q_PRIVATE_SLOT(d_func(), void _q_disconnectOnClose())public://構建一個進度對話框。默認設置: 標簽文本為空。取消按鈕文本為“cancel”。最小值為 0,最大值為 100。//parent參數是對話框的父窗口。窗口標志 flags 被傳遞給QDialog::QDialog()構造函數。//QDialog(QWidget * parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags());explicitQProgressDialog(QWidget * parent = nullptr, Qt::WindowFlags flags = Qt::WindowFlags());QProgressDialog(const   QString  &             labelText,const   QString  &      cancelButtonText,int             minimum         ,int             maximum         ,QWidget  *      parent = nullptr,Qt::WindowFlags flags  = Qt::WindowFlags());//構建一個進度對話框。labelText是用于提醒用戶正在進行什么的文本。//cancelButtonText是顯示在取消按鈕上的文本。如果傳遞了QString(),則不會顯示取消按鈕。//最小值 minimum和最大值 maximum是該進度對話框顯示進度的操作中的步驟數。//例如,如果要檢查50個文件,則該值的最小值為0,最大值為50。//在檢查第一個文件之前,調用setValue(0)。//處理每個文件時,調用setValue(1)、setValue(2)等,最后在檢查最后一個文件后調用 setValue(50)。//parent參數是對話框的父級窗口。parent和標志 flags,被傳遞給QDialog::QDialog() 構造函數。~QProgressDialog();//   Q_PROPERTY(QString     labelText      //此屬性持有標簽的文本。默認文本為空字符串。
//              READ        labelText      WRITE   setLabelText)QString     labelText() const;
public Q_SLOTS:void     setLabelText(const QString & text);public :
//   Q_PROPERTY(int         value         此屬性保存了當前完成的進度量。
//              READ        value         WRITE    setValue  )int         value() const;
public Q_SLOTS:void     setValue(int progress);public :
//   Q_PROPERTY(int         minimum       //此屬性表示進度條所代表的最低值。默認值為  0。
//              READ        minimum       WRITE    setMinimum)int         minimum() const;
public Q_SLOTS:void     setMinimum(int minimum);void     setRange  (int minimum, int maximum);public :
//   Q_PROPERTY(int         maximum       //此屬性持有進度條 表示的最高值。 默認值為100。
//              READ        maximum       WRITE   setMaximum)int         maximum() const;
public Q_SLOTS:void     setMaximum(int maximum);public :
//   Q_PROPERTY(bool        wasCanceled   //此屬性表示對話框是否被取消
//              READ        wasCanceled)bool        wasCanceled() const;//   Q_PROPERTY(bool        autoReset     //當value()等于最大值時,是否調用reset()。默認為true。
//              READ        autoReset     WRITE  setAutoReset)bool        autoReset() const;void     setAutoReset(bool reset);//   Q_PROPERTY(bool        autoClose     //調用 reset()時是否隱藏本對話框。默認值為true。
//              READ        autoClose     WRITE  setAutoClose)bool        autoClose() const;void     setAutoClose(bool close);//   Q_PROPERTY(int         minimumDuration  //此屬性表示對話框出現前必須經過的時間。
//              READ        minimumDuration   WRITE   setMinimumDuration)int         minimumDuration() const;
public Q_SLOTS:void     setMinimumDuration(int ms);public :QSize sizeHint() const override;//將標簽設置為label。進度對話框會進行相應調整以合適顯示。//該標簽將歸屬于進度對話框,并在必要時被刪除,因此請勿傳遞棧上對象的地址。void setLabel       (QLabel       * label );void setBar         (QProgressBar * bar   ); //Sets the progress bar widget to bar.void setCancelButton(QPushButton  * button); //傳遞空指針將不再顯示本取消按鈕。//Sets the cancel button to the push button, cancelButton.//If nullptr is passed, no cancel button will be shown.public Q_SLOTS://void setMinimumDuration(int       ms        );//void setMaximum        (int       maximum   );//void setMinimum        (int       minimum   );//void setRange          (int       minimum, int maximum);//void setValue          (int       progress  );//void setLabelText(const QString & text      );void setCancelButtonText(const QString & text); //若形參為空字符串,則會刪除本按鈕//Sets the cancel button's text to cancelButtonText.//If the text is set to QString() then it will cause the//  cancel button to be hidden and deleted.//重置進度對話框。如果autoClose()為true,則進度對話框將被隱藏。void reset    ();void cancel   ();//重置進度對話框。wasCanceled()保持為真,直到進度對話框被重置 reset。進度對話框將被隱藏。protected Q_SLOTS://如果在算法啟動后經過了minimumDuration毫秒,對話框仍然隱藏,則顯示該對話框。void forceShow();Q_SIGNALS:void canceled (); //經測試,程序員不做任何處理時,是無法通過點擊取消按鈕關閉本對話框的。//當點擊取消按鈕時,會觸發此信號。默認情況下,它與cancel()插槽連接。需要手動來連接。public:using QDialog::open; //將對話框顯示為窗口模態 window modal dialog對話框,并立即返回。//virtual void QDialog::open();void open(QObject * receiver, const char * member);//顯示對話框的同時,指定本類 canceled()信號的槽函數。//Opens the dialog and connects its canceled() signal to the//  slot specified by receiver and member.//The signal will be disconnected from the slot when the dialog is closed.}; //完結 class QProgressDialog : public QDialogQT_END_NAMESPACE#endif // QPROGRESSDIALOG_H

(8)

謝謝

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/915979.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/915979.shtml
英文地址,請注明出處:http://en.pswp.cn/news/915979.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

學習游戲制作記錄(技能系統)7.24

1.技能系統概念首先讓我們了解一下游戲的技能本質是什么&#xff0c;以投擲劍為例子&#xff0c;當玩家使用這個技能時&#xff0c;首先會播放玩家的動畫&#xff0c;隨后通過技能腳本創建一個劍的對象&#xff0c;當劍回收時會再次調用腳本&#xff0c;讓它朝向玩家飛來并銷毀…

外部存檔(External Archive)機制

前言 提醒&#xff1a; 文章內容為方便作者自己后日復習與查閱而進行的書寫與發布&#xff0c;其中引用內容都會使用鏈接表明出處&#xff08;如有侵權問題&#xff0c;請及時聯系&#xff09;。 其中內容多為一次書寫&#xff0c;缺少檢查與訂正&#xff0c;如有問題或其他拓展…

MybatisPlus操作方法詳細總結

摘要&#xff1a;本文圍繞 MyBatis-Plus 數據操作展開&#xff0c;涵蓋標準數據層 CRUD 與分頁查詢&#xff1b;以及各種的復雜 SQL 查詢&#xff1b;映射匹配&#xff08;TableField、TableName 注解&#xff09;與 ID 生成策略&#xff08;TableId 五種類型及全局配置&#x…

【C語言進階】動態內存管理的面試題||練習

本節內容專門整理了一些動態內存管理的面試題&#xff0c;配有詳細的解答。 目錄 1. 看代碼說結果 2. 看代碼說結果 3. 看代碼說結果 4.小樂樂與歐幾里得 描述 分析1&#xff1a; 分析2&#xff1a; 代碼&#xff1a; 5. 空心正方形 分析&#xff1a; 1. 看代碼說結…

【圖論】倍增與lca

void dfs(long u,long father){ dep[u]dep[father]1;//只在這里初始化depfor(long i1;(1<<i)<dep[u];i)fa[u][i]fa[fa[u][i-1]][i-1];//只這里用的倍增for(long ihead[u];~i;iedge[i].next){long vedge[i].to;if(vfather)continue;fa[v][0]u;dfs(v,u); }} long lca(lo…

VS Code 美化插件

目錄1. Better Comments 更好的注釋2. indent-rainbow 彩虹的縮進3. Trailing Spaces 尾隨的空格4. Gruvbox Material 護眼的材質5. Md Editor 博客編輯器6. 待補充推薦筆記&#xff1a;VS Code寫代碼必備的五款代碼美化插件 1. Better Comments 更好的注釋 Better Comments Be…

火語言 RPA 在日常運維中的實踐

在系統運維和技術支持工作中&#xff0c;總有一些操作像 “固定程序” 一樣循環往復&#xff1a;定期檢查服務器狀態、批量處理用戶權限申請、手動清理系統日志…… 這些工作步驟固定、邏輯簡單&#xff0c;卻占用了大量本可用于故障排查和系統優化的時間。近期在優化運維團隊的…

FOUPK3system5XOS系統 NTX V2.0發布通知

FOUPK3system5XOS系統NTX V2.0發布通知更新1.系統安全&#xff1a;使用FOUPK3system5XOS NOS X9新內核與FOUPK3system5XOS系統19.63正式版一樣提供更好的安全性2.原生應用&#xff1a;啟用FOUPK3system5XOS ONS X9 API 72服務FOUPK3system5XOS系統 NTX V2.0用戶支持使用FOUPK3…

爬蟲算法原理解析

文章目錄 核心算法原理 1. 圖遍歷算法 廣度優先搜索(BFS) 深度優先搜索(DFS) 2. URL調度算法 優先級隊列調度 3. 頁面去重算法 基于哈希的去重 基于布隆過濾器的去重 4. 鏈接提取與規范化 5. 抓取頻率控制算法 6. 增量爬取算法 高級算法策略 1. PageRank算法在爬蟲中的應用 2. …

探索雙鏈表:C語言中的鏈式結構魔法

目錄 引言 一、雙鏈表基礎 1.1、什么是雙鏈表&#xff1f; 1.2、雙鏈表節點的結構定義 二、雙鏈表的基本操作 2.1、雙鏈表的初始化 2.2、尾插法 2.3、頭插 2.4、判斷雙鏈表是否為空 2.5、尾刪法 2.6、頭刪法 2.7、查找 2.8、雙鏈表在指定位置之前插入 2.9、雙鏈表…

HTML5 + CSS3模擬西門慶、武大郎和潘金蓮的精彩520微信聊天,看完我又相信愛情了

今天520了&#xff0c;我用HTML5 CSS3模擬了西門慶、武大郎和潘金蓮的精彩微信聊天&#xff0c;希望你看完以后可以在緊張的工作中&#xff0c;放松一下&#xff0c;開心一下&#xff0c;同時祝你在這個520可以過得開心快樂。 目錄 1 實現思路 1.1 聊天實現素材 1.2 HTML布…

【Linux】Linux了解與基本指令(1)

hello~ 很高興見到大家! 這次帶來的是C中關于Linux基本指令這部分的一些知識點,如果對你有所幫助的話,可否留下你寶貴的三連呢? 個 人 主 頁: 默|笙 文章目錄一、認識Linux二、操作系統&#xff08;OS&#xff09;三、基本指令1. 目錄與普通文件1.1 目錄1.2 普通文件2. pwd 與…

dify 學習筆記

目錄 啟動項目 瀏覽器訪問&#xff1a; dify刪除工作流 代碼是開源dify 啟動項目 cd E:\project\qwen\dify-main\docker docker compose up -d 瀏覽器訪問&#xff1a; http://127.0.0.1/apps dify刪除工作流 右下角&#xff0c;三個點&#xff0c;點擊彈出框&#xff0…

【YOLOv8改進 - 特征融合】FCM:特征互補映射模塊 ,通過融合豐富語義信息與精確空間位置信息,增強深度網絡中小目標特征匹配能力

YOLOv8目標檢測創新改進與實戰案例專欄 專欄目錄: YOLOv8有效改進系列及項目實戰目錄 包含卷積,主干 注意力,檢測頭等創新機制 以及 各種目標檢測分割項目實戰案例 專欄鏈接: YOLOv8基礎解析+創新改進+實戰案例 文章目錄 YOLOv8目標檢測創新改進與實戰案例專欄 介紹 摘要 文…

算法訓練營day30 貪心算法④ 重疊問題 452. 用最少數量的箭引爆氣球、435. 無重疊區間 、 763.劃分字母區間

貪心算法的第四篇博客&#xff0c;主要是重疊問題的練習&#xff0c;思路都較為簡單&#xff0c;最后一題可能需要著重思考一下 452. 用最少數量的箭引爆氣球 遍歷數組&#xff0c;如果存在重疊則減少一支箭&#xff08;不重疊則增加一支箭&#xff09; 重疊的判定&#xff1a…

Gradio, Streamlit, Dash:AI應用開發的效率之選

在人工智能時代&#xff0c;如何快速將模型原型轉化為交互式應用&#xff0c;是許多開發者面臨的挑戰。Gradio、Streamlit 和 Dash 作為流行的Python框架&#xff0c;各自以其獨特的優勢&#xff0c;幫助我們高效地構建AI應用界面。本文將深入對比這三大框架的優缺點、適用場景…

數學基礎弱能學好大數據技術嗎?

很多同學剛進入大學&#xff0c;一聽到“大數據”“數據分析”這些詞&#xff0c;就覺得必須得是數學大佬才能玩得轉。高數線代概率論&#xff0c;光聽名字就頭大&#xff0c;更別說那些復雜的公式和推導了。但事實真的是這樣嗎&#xff1f;數學不好&#xff0c;就不能學大數據…

子進程信號處理

SIGCHLD 信號詳解??一、信號定義與作用??SIGCHLD? 是 UNIX/Linux 系統中由內核向父進程發送的信號&#xff0c;用于通知子進程的狀態變化&#xff08;如終止、停止或恢復&#xff09;?。其主要作用包括&#xff1a;?回收子進程資源?&#xff1a;避免子進程終止后成為僵…

WPF 項目設置應用程序圖標和設置程序集圖標

在 WPF 項目中更改生成的可執行文件&#xff08;.exe&#xff09;圖標需要完成兩個關鍵步驟&#xff1a;設置應用程序圖標和設置程序集圖標。以下是詳細操作指南&#xff1a; 第一步&#xff1a;準備圖標文件 準備一個 .ico 格式的圖標文件&#xff08;必須使用 ICO 格式&…

JMeter壓測黑馬點評優惠券秒殺的配置及請求爆紅問題的解決(詳細圖解)

目錄 一、前言 二、優惠券秒殺壓測配置 三、已配置token但是請求全部爆紅的問題 四、配置JSON斷言后的效果 一、前言 在學習黑馬點評優惠券秒殺功能的壓力測試時&#xff0c;由于老師沒有任何引導而是直接開始測試&#xff0c;所以本博客記錄一下JMeter壓測黑馬點評優惠券秒…