一、效果圖如下
二、效果圖拆解
根據效果圖,實際就是以控制項中心為圓心,計算周圍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...