Qt使用QPainter實(shí)現(xiàn)自定義圓形進(jìn)度條
一、項(xiàng)目介紹
本文介紹利用QPainter實(shí)現(xiàn)自定義圓形進(jìn)度條。
二、項(xiàng)目基本配置
新建一個(gè)Qt案例,項(xiàng)目名稱為“RoundprogressbarTest”,基類選擇“QWidget”,點(diǎn)擊選中創(chuàng)建UI界面復(fù)選框,完成項(xiàng)目創(chuàng)建。
三、UI界面設(shè)置
UI界面如下:
為簡單起見,這里只設(shè)計(jì)兩個(gè)控件:
序號(hào) | 名稱 | 類型 | 屬性 |
---|---|---|---|
① | pushButton | QPushButton | text:Start |
② | gridLayout | QGridLayout | / |
四、主程序?qū)崿F(xiàn)
4.1 roundprogressbar.h和roundprogressbar.cpp
由于roundprogressbar.h和roundprogressbar.cpp代碼量較大,這里不進(jìn)行展示,僅作簡要說明。
函數(shù)如下:
//設(shè)置初始角度,順時(shí)針逆時(shí)針 void setdefault(int,bool); //設(shè)置外圈寬度 void setOutterBarWidth(float); //設(shè)置內(nèi)圈寬度 void setInnerBarWidth(float); //設(shè)置范圍 void setRange(float, float); //設(shè)置當(dāng)前值 void setValue(float); //設(shè)置外圈顏色 void setOutterColor(const QColor&); //設(shè)置內(nèi)圈漸變色 void setInnerColor(const QColor&,const QColor&); void setInnerColor(const QColor&); //設(shè)置默認(rèn)文字顏色 void setDefaultTextColor(const QColor&); //設(shè)置控制命令 void setControlFlags(int); //設(shè)置顯示數(shù)字精度 void setPrecision(int);
在構(gòu)造函數(shù)中進(jìn)行了如下初始化設(shè)定:
//設(shè)置初始角度,順時(shí)針逆時(shí)針 setdefault(90,true); //設(shè)置默認(rèn)外圈寬度 setOutterBarWidth(18); //設(shè)置默認(rèn)內(nèi)圈寬度 setInnerBarWidth(16); //設(shè)置默認(rèn)范圍 setRange(0,100); //設(shè)置默認(rèn)值 setValue(75); //設(shè)置外圈顏色 setOutterColor(QColor(233,248,248)); //設(shè)置默認(rèn)漸變色 setInnerColor(QColor(49, 177, 190),QColor(133, 243, 244)); //設(shè)置默認(rèn)文字顏色 setDefaultTextColor(QColor(49,177,190)); //設(shè)置默認(rèn)精度 setPrecision(0); //設(shè)置內(nèi)圈默認(rèn)文字樣式 setInnerDefaultTextStyle(RoundProgressBar::percent);
設(shè)置初始化角度為90度,順時(shí)針,設(shè)置外圈寬度為18,內(nèi)圈寬度為18;設(shè)置默認(rèn)范圍為0-100,設(shè)置默認(rèn)值為75,設(shè)置外圈顏色、漸變色、文本顏色和默認(rèn)精度為0(無小數(shù))設(shè)置內(nèi)圈文字樣式為percent(百分比樣式)。
4.2 widget.h頭文件
頭文件中引入roundprogressbar.h頭文件,按鈕點(diǎn)擊槽函數(shù)和定時(shí)器對(duì)應(yīng)的槽函數(shù)、timer對(duì)象和bar1對(duì)象:
private slots: void setText(); void on_pushButton_clicked(); private: RoundProgressBar* bar1; QTimer timer; int i=0;
4.3 widget.cpp源文件
源文件中在構(gòu)造函數(shù)中定義圓形進(jìn)度條和定時(shí)器,將定時(shí)器timeout信號(hào)和槽函數(shù)setText連接:
//*********************** RoundProgressBar ************************ bar1=new RoundProgressBar(this); bar1->setOutterBarWidth(20); bar1->setInnerBarWidth(20); bar1->setValue(0);//設(shè)置默認(rèn)值為0 bar1->setControlFlags(RoundProgressBar::all); ui->gridLayout->addWidget(bar1,0,0); //計(jì)時(shí) timer.setInterval(100);//設(shè)置計(jì)時(shí)間隔為0.1s connect(&timer,&QTimer::timeout,this,&Widget::setText);
在析構(gòu)函數(shù)中停止定時(shí)器:
Widget::~Widget() { if(timer.isActive()) timer.stop(); delete ui; }
兩個(gè)槽函數(shù)定義如下:
//點(diǎn)擊 void Widget::on_pushButton_clicked() { timer.start(); } void Widget::setText() { bar1->setValue(i++); bar1->repaint(); if(i>100) //100停止 { timer.stop(); } }
五、效果演示
完整效果如下:
到此這篇關(guān)于Qt使用QPainter實(shí)現(xiàn)自定義圓形進(jìn)度條的文章就介紹到這了,更多相關(guān)Qt自定義進(jìn)度條內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++ Log日志類輕量級(jí)支持格式化輸出變量實(shí)現(xiàn)代碼
這篇文章主要介紹了C++ Log日志類輕量級(jí)支持格式化輸出變量實(shí)現(xiàn)代碼,需要的朋友可以參考下2019-04-04C語言實(shí)現(xiàn)簡單的抽獎(jiǎng)系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)簡單的抽獎(jiǎng)系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-04-04tinyxml 常用的C++ XML解析器非常優(yōu)秀
讀取和設(shè)置xml配置文件是最常用的操作,試用了幾個(gè)C++的XML解析器,個(gè)人感覺TinyXML是使用起來最舒服的,因?yàn)樗腁PI接口和Java的十分類似,面向?qū)ο笮院芎?/div> 2012-11-11最新評(píng)論