最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Qt實現(xiàn)小功能之圓形進度條的方法詳解

 更新時間:2022年10月09日 08:52:44   作者:中國好公民st  
在Qt自帶的控件中,只有垂直進度條、水平進度條兩種。在平時做頁面開發(fā)時,有些時候會用到圓形進度條,比如說:下載某個文件的下載進度。本文就來實現(xiàn)一個圓形進度條,需要的可以參考一下

在Qt自帶的控件中,只有垂直進度條、水平進度條兩種。

在平時做頁面開發(fā)時,有些時候會用到圓形進度條,比如說:下載某個文件的下載進度。

展示效果,如下圖所示:

實現(xiàn)這個功能主要由以下幾個重點:

1:圖形繪制

2:數(shù)值計算

也算是一個初級例子,下面我來講解下如何實現(xiàn)這個簡單的小功能吧!

功能

自定義繪制類:QRoundedProgress

繼承自QWidget

開發(fā)環(huán)境:vs2017 + Qt5.14.2

圖形繪制

1.繪制窗口整體背景色值

QPainter painter(this);
painter.fillRect(this->rect(), m_crBack);
painter.setRenderHint(QPainter::Antialiasing); //抗鋸齒

m_crBack:窗口背景色,默認(rèn)是QColor(255, 255, 255);

因為后續(xù)要繪制圓形,在繪制之前加上抗鋸齒效果,如果不加繪制的圓形線條會很不流暢哦~

2.圓形進度條通道繪制

什么叫做圓形進度條的通道呢?

如圖所示的灰色區(qū)域就是圓形進度條的通道,也就是我們說的圓環(huán)。

實現(xiàn)方式:兩個半徑不同的圓重疊在一起(且圓心相同),未重疊的部分也就是圓形的通道區(qū)域。

假設(shè)QRoundedProgress類大小是:QSize(100, 100),也就是說該窗口的寬度=100,高度=100。

大圓形代碼:

painter.setPen(m_crProgressChannel);
painter.setBrush(m_crProgressChannel);
painter.drawEllipse(this->rect());

以整個窗口作為圓形的區(qū)域進行繪制,顯示效果如下:

m_crProgressChannel:通道號顏色值,默認(rèn)是QColor(220, 220, 220);

小圓形代碼:

QRect rectInCircl = this->rect();
rectInCircl.adjust(10, 10, -10, -10);
painter.setPen(m_crBack);
painter.setBrush(m_crBack);
painter.drawEllipse(rectInCircl);

以窗口的整體區(qū)域為標(biāo)準(zhǔn),向內(nèi)調(diào)整10個像素大小,采用了QRect::adjust方法。

10就是圓環(huán)的寬度了。

3.圓形進度條繪制

進度條也就是在文章最開始gif動畫中藍(lán)色的動態(tài)條。

該如何簡單的繪制整個進度呢?

最簡單的方式:采用QPainter扇形的繪制方式!

在程序中,進度條的變化可以采用扇形的區(qū)域進行表示。隨著數(shù)據(jù)的變化,扇形的面積也逐漸遞增,直到達(dá)到設(shè)定的最大值為止。

該如何繪制呢?

要是繪制一個實心的扇形,直接在小圓形代碼后面追加肯定是不行的,會出現(xiàn)下面的效果:

小圓形直接被覆蓋住了,這樣的效果與文章最開始的展示效果是不一致的。

修改方式:將扇形繪制的方法放置到大圓形、小圓形代碼之間

繪制扇形代碼如下:

painter.setPen(m_crProgressBar);
painter.setBrush(m_crProgressBar);
painter.drawPie(this->rect(), 90 * 16, -m_nValue * m_fStep * 16);

m_crProgressBar:圓形進度條顏色值,默認(rèn)是QColor(16, 142, 233);

4.文本繪制

圖形繪制完成后,最后繪制文本展示

painter.setFont(m_font);
painter.setPen(m_crText);
painter.drawText(rectInCircl, Qt::AlignHCenter| Qt::AlignVCenter, m_sValue);

數(shù)值計算

在圓形進度條中需要設(shè)置以下幾種計算

1.計算步長

m_fStep = 360.0/ (maximum - minimum);

根據(jù)步長大小,計算每次移動的扇面面積

painter.drawPie(this->rect(), 90 * 16, -m_nValue * m_fStep * 16);

通常情況下,圓形進度條的走向一般是順時針,但是,在圓形中走向卻是逆時針方向,所以在進行扇形面積計算時,會從90°逆向繪制。

2.實時數(shù)據(jù)計算

由外界調(diào)用者傳入實時變化數(shù)據(jù),并計算當(dāng)前加載的百分比數(shù)值。

float fNum = (value*1.0) / (m_nMaxMum - m_nMinMum);
m_sValue = QString::number(fNum*100, 'f', 0) + QStringLiteral("%");

其中,m_sValue該變量是應(yīng)用到drawText中文本繪制的。

到這里,簡單的圓形進度條就繪制完成了~

到此這篇關(guān)于Qt實現(xiàn)小功能之圓形進度條的方法詳解的文章就介紹到這了,更多相關(guān)Qt圓形進度條內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 淺析C++中單鏈表的增、刪、改、減

    淺析C++中單鏈表的增、刪、改、減

    以下是對C++中單鏈表的增、刪、改、減進行了詳細(xì)的介紹,需要的朋友可以過來參考下
    2013-09-09
  • c++ chrono 獲取當(dāng)前時間的實現(xiàn)代碼

    c++ chrono 獲取當(dāng)前時間的實現(xiàn)代碼

    這篇文章主要介紹了c++ chrono 獲取當(dāng)前時間的實現(xiàn)代碼,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-07-07
  • C語言中如何利用循環(huán)嵌套輸出一個菱形

    C語言中如何利用循環(huán)嵌套輸出一個菱形

    這篇文章主要介紹了C語言中如何利用循環(huán)嵌套輸出一個菱形問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • 深入解析 C++中std::stoul 函數(shù)

    深入解析 C++中std::stoul 函數(shù)

    std::stoul是 C++ 標(biāo)準(zhǔn)庫中的一個字符串轉(zhuǎn)換函數(shù),它用于將?std::string?或?std::wstring?轉(zhuǎn)換為?unsigned long?類型的整數(shù),下面就來介紹一下
    2025-04-04
  • 詳解C語言隨機數(shù)設(shè)置的三種方式(保姆級教程)

    詳解C語言隨機數(shù)設(shè)置的三種方式(保姆級教程)

    本篇文章將為大家介紹在C語言中設(shè)置隨機數(shù)的三大方法的使用,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)C語言有一定的幫助,需要的可以參考一下
    2022-11-11
  • C++構(gòu)造函數(shù)初始化順序詳解

    C++構(gòu)造函數(shù)初始化順序詳解

    這篇文章主要介紹了C++構(gòu)造函數(shù)初始化順序詳解,是對C++代碼的運行機制深入探討,需要的朋友可以參考下
    2014-10-10
  • C++繼承中的訪問控制實例分析

    C++繼承中的訪問控制實例分析

    這篇文章主要介紹了C++繼承中的訪問控制,是面向?qū)ο蟪绦蛟O(shè)計中非常重要的知識點,需要的朋友可以參考下
    2014-08-08
  • 解決vscode下調(diào)試c/c++程序一閃而過的問題(Windows)

    解決vscode下調(diào)試c/c++程序一閃而過的問題(Windows)

    這篇文章主要介紹了解決vscode下調(diào)試c/c++程序一閃而過(Windows),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • VC使用TerminateProcess結(jié)束進程實例

    VC使用TerminateProcess結(jié)束進程實例

    這篇文章主要介紹了VC使用TerminateProcess結(jié)束進程的方法,實例演示了TerminateProcess結(jié)束進程的具體實現(xiàn)過程,在進行VC應(yīng)用程序開發(fā)時非常具有實用價值,需要的朋友可以參考下
    2014-10-10
  • C++11的函數(shù)包裝器std::function使用示例

    C++11的函數(shù)包裝器std::function使用示例

    C++11引入的std::function是最常用的函數(shù)包裝器,它可以存儲任何可調(diào)用對象并提供統(tǒng)一的調(diào)用接口,以下是關(guān)于函數(shù)包裝器的詳細(xì)講解,包括它的基本用法、特點、限制、以及與其他相關(guān)機制的對比
    2024-12-12

最新評論

宁海县| 巨鹿县| 上栗县| 奈曼旗| 久治县| 额尔古纳市| 松桃| 临湘市| 海林市| 德江县| 德江县| 黎城县| 来凤县| 什邡市| 五台县| 花垣县| 湾仔区| 万全县| 仙游县| 桐梓县| 桦甸市| 安徽省| 福安市| 镇原县| 岳普湖县| 平乐县| 连州市| 拉萨市| 双流县| 丽水市| 芷江| 临澧县| 潜山县| 周宁县| 若羌县| 蓝山县| 贡山| 文昌市| 塔河县| 金塔县| 肥东县|