Qt圓形等待介面繪製 3

2021-10-24 03:58:22 字數 2062 閱讀 8334

一、效果圖如下

二、效果圖拆解

根據效果圖,實際就是以控制項中心為圓心,計算周圍12個小圓座標,然後繪製12個不同顏色,不同透明度的小圓。這裡顏色有兩個漸變,前幾個小圓透明度逐漸減小,後幾個小圓透明度逐漸增加,並且同時有顏色漸變。

四、準備工作

①初始化視窗類,類繼承自qdialog,設定視窗大小,去掉標題欄,工作列,視窗置頂等,**如下所示:

setfixedsize(150,150);

//去掉標題欄 設定置頂 去掉工作列圖示

setwindowflags(qt::framelesswindowhint|qt::tool|qt::windowclosebuttonhint|qt::windowstaysontophint);

②很重要的一點,設定視窗背景透明,如果不設定這個,視窗執行起來就是有乙個白色背景,設定**如下:

//設定視窗背景透明

setattribute(qt::wa_translucentbackground, true);

五、詳細繪製過程①過載qwidget的繪圖函式paintevent函式,初始化繪圖的qpainter物件,啟動反鋸齒,將繪製中心移動到控制項中心,**如下所示:

qpainter painter(this);

//啟動反鋸齒

painter.setrenderhint(qpainter::antialiasing, true);

int width=this->width();

int height=this->height();

//畫筆移動到中間

painter.translate(width >> 1, height>> 1);

②計算12個小圓的位置,並且繪製小圓,**如下所示:

int offsetdest=(width-30)/2;

painter.setpen(qt::nopen);

//計算小圓座標

for(int i=0;i<12;++i)

此時沒有加入定時器,所以影象不會動,而且沒有設定小圓的透明度,所以12個小圓顏色一樣,效果圖如下:

③將小圓分成兩部分,前面的小圓顏色逐漸加深,透明度減少,後面的小圓顏色逐漸變淺,透明度增加,下面示例**中,將前三個小圓分成一部分,後面的9個小圓分成第二部分處理:

for(int i=0;i<3;++i)

for(int i=0;i<9;++i)

效果圖如下所示:

④新增定時器,讓小圓動起來,**如下:

starttimer(50);

//重寫timerevent函式,定期執行更新操作

void ringwait3::timerevent(qtimerevent*)

其中offset是int型別的,在標頭檔案中定義,初始化為0即可。

最後在修改paintevent函式中的for迴圈,**如下所示:

for(int i=0;i<3;++i)

for(int i=0;i<9;++i)

到此繪製過程全部完成。

六、最後總結

①上面描述的是繪製的整個過程,原始碼中,可以根據自身需要設定不同的圓大小,顏色,順時針/逆時針等,實現不同的效果。

七、**獲取

QT繪製手勢密碼介面

1 封裝類 ifndef afguesture h define afguesture h 手勢輸入控制項 輸入完成時,發出訊號result 外部呼叫者負責處理結果。include class afguesture public qframe q object signals void result...

QT繪製介面無變化解決方式(QT系列15)

在學完qt的繪製函式後,大家也許會想新增乙個按鈕,按下按鈕後就繪製另一張不同的影象,但實際寫完後,卻發現沒有什麼作用。如果有人把介面隱藏再開啟就會發現,影象發生了變化。這種情況的原因是qt的介面不能實時重新整理,所以繪製完影象後,介面不能顯示變化,隱藏再放大介面後介面會自動重新整理一次,這樣才使得介...

css畫鐘錶 如何使用css3繪製出圓形動態時鐘

使用css3繪製出圓形動態時鐘的原理 眾所周知的是div形狀是方形的,那麼我們首先需要使用border radius屬性將其變換成圓形。為了使指標轉動起來,我們需要使用 webkit transform origin center100px 來設定我們的旋轉基點。然後利用 webkit transf...