最近做了乙個提示框消失的功能,覺著挺有意思,以前一直以為qt子視窗不能做淡出效果,其實qt的淡出功能已經幫我們封裝好了,我們僅僅只需要幾行**就可以做出酷炫的視窗關閉效果,寫此篇文章的時候,我特意瀏覽了下之前寫的兩篇文章(qpainterpath 不規則提示框,qpainterpath 不規則提示框(二)),現在回想起來那會兒確實知之甚少,關於頂層視窗不能做圓角,其實幫助文件裡已經說的很明確,解決辦法有多種,一種是重寫paintevent函式,另一種是把widget包裝一層,本篇文章就用的是後一種方式,如圖1所示視窗關閉動畫,例項程式中做了淡出、飛出、縮小等關閉視窗動畫,除此之外還包含了陰影、背景著色、濾鏡等特效。
圖1 視窗特效
如圖1視窗特效所示,例項中總共包含了4個groupbox,這4個groupbox是分別用來展示不同特效,下面分別講述4個groupbox
在講解**之前,先來認識幾個概念
1、移出動畫,使用屬性動畫qpropertyanimation類進行,propertyname的引數是視窗的屬性,詳情參見q_property屬性 。targetobject物件設定為this內部單獨封裝的widget,這樣做的目的使得該提示框不需要依賴其他視窗遮擋即可做出飛出效果
12、淡出void
gmpoperatetip::moveout()
224 }
1 m_popacity = new qgraphicsopacityeffect(this3、最小化);2 m_popacity->setopacity(1);3
4setgraphicseffect(m_popacity);
56 m_panimation->settargetobject(m_popacity);
7 m_panimation->setpropertyname("
opacity");
89 m_panimation->setstartvalue(1
);10 m_panimation->setendvalue(0);
1 m_panimation->setpropertyname("4、動畫啟動機制geometry");
23 qrect startrect =rect();
4startrect.moveto(pos());
5 qrect stoprect = qrect(startrect.center(), qsize(0, 0
));6
7 m_panimation->setstartvalue(startrect);
8 m_panimation->setendvalue(stoprect);
使用定時器控制動畫,當指定時間後啟動動畫,並且在動畫完成後關閉視窗
1視窗顯示時啟動定時器,並且將視窗隨機移動到螢幕乙個位置void
initializeconnect()224
25 m_panimation->start();
26});
27 }
15、陰影bool
event(qevent *e)212
13return __super::event
(e);
14 }
16、著色void setshadowenable(bool
enable)210
11 setgraphicseffect(enable ?m_pshadow : nullptr);
12 }
注釋中的**也可以進行著色,但是窗體的一些特殊樣式不能完成,因此使用stylesheet來完成背景色修改
1static
const qstring c_szstylesheet = "
qwidget"
;
17、快捷呼叫介面,該介面都是類的靜態方法可以直接呼叫void gmpoperatetip::setbackgroundcolor(const qcolor &color)210
//m_pcolorize->setcolor(color);
1112 qcolor border =color;
13 border.setalpha(255 * 0.1
);14 qstring borderrgba = qstring("
rgba(%1,%2,%3,%4)
").arg(border.red()).arg(border.green()).arg(border.blue()).arg(border.alpha());
15setstylesheet(c_szstylesheet.arg(color.name()).arg(borderrgba));
16 }
view code
8、測試,由於測試**較多,我只貼出2個
1 voidtip::on_pushbutton_success_clicked()動畫提示框2 5
6 voidtip::on_pushbutton_warning_clicked()
7
如果您覺得文章不錯,不妨給個打賞,寫作不易,感謝各位的支援。您的支援是我最大的動力,謝謝!!!
很重要--**宣告
奮鬥中的無名小卒。。。
p.p1
span.s1
span.s2
很重要--**宣告
Qt之標準對話方塊 顏色對話方塊
1 在標頭檔案中包含 include qcolordialog void widget on colorbutton clicked 這裡使用了qcolordialog的靜態函式getcolor 來獲取顏色,它的三個引數的作用分別是 設定初始顏色 指定父視窗和設定對話方塊標題。getcolor 函式...
Qt 對話方塊
1.qt 中使用qdialog 類實現對話方塊。就像主視窗一樣,我們通常會設計乙個類繼承 qdialog qdialog 及其子類,以及所有 qt dialog 型別的類 的對於其 parent 指標都有額外的解釋 如果 parent 為null 則該對話方塊會作為乙個頂層視窗,否則則作為其父元件的...
Qt 對話方塊
1.qdialog 類是對話方塊視窗的基類。對話方塊視窗是乙個頂級視窗,通常用作短期任務,或 者是與使用者的簡短會話等場合。2.對話方塊可以分為模態對話方塊和非模態對話方塊。所謂模態對話方塊就是在其沒有被關閉之前,使用者不能與同乙個應用程式的其他視窗進行互動,直到該對話方塊關閉。奪取焦點 對於非模態...