QT實現不規則窗體和透明窗體

2021-06-22 19:43:17 字數 1468 閱讀 5828

不規則窗體的實現有兩種方式:

一種是設定窗體的掩碼影象;

另一種是設定窗體背景透明,然後重寫其繪圖函式,將背景圖繪製上去。

第一種方式

首先要準備兩張影象,一張是要顯示的影象,另一張是第一張圖的掩碼影象,黑色部分是你的窗體要顯示的部分,如圖:

具體實現的關鍵**如下:

irregularform1::irregularform1(qwidget *parent) :

qwidget(parent)

執行效果不是特別完美,應該是我的掩碼影象的問題,如圖:

這種方式有乙個問題,就是當你的影象特別不規則的時候,會有很明顯的鋸齒出現。之前做過乙個**影象就出現這個問題,解決的辦法是使用下面的第二種方法。

第二種方式

只需要準備一張,透明部分將不會顯示,支援半透明。我這裡弄了一張背景透明,前景半透明的影象,如圖:

具體實現的關鍵**如下:

irregularform2::irregularform2(qwidget *parent) :

qwidget(parent)

//重寫繪圖事件

void irregularform2::paintevent(qpaintevent *)

效果截圖:

說到這裡,我們的不規則透明窗體雖然建立出來了,但是現在我們無法移動它了,現在我們就來實現左鍵拖動窗體的功能,首先要先宣告兩個變數,另外要重寫三個事件,**如下:

class irregularform1 : public qwidget

;關鍵的實現**(press變數在建構函式中初始化為false):

void irregularform1::mousepressevent(qmouseevent *event)

}void irregularform1::mousemoveevent(qmouseevent *event)

}void irregularform1::mousereleaseevent(qmouseevent *event)

這樣就實現不規則窗體的移動功能了。

附件:

原始碼irregularform.zip

QT實現不規則窗體和透明窗體

不規則窗體的實現有兩種方式 一種是設定窗體的掩碼影象 另一種是設定窗體背景透明,然後重寫其繪圖函式,將背景圖繪製上去。第一種方式 首先要準備兩張影象,一張是要顯示的影象,另一張是第一張圖的掩碼影象,黑色部分是你的窗體要顯示的部分,如圖 具體實現的關鍵 如下 irregularform1 irregu...

QT實現不規則窗體和透明窗體

不規則窗體的實現有兩種方式 一種是設定窗體的掩碼影象 另一種是設定窗體背景透明,然後重寫其繪圖函式,將背景圖繪製上去。第一種方式 首先要準備兩張影象,一張是要顯示的影象,另一張是第一張圖的掩碼影象,黑色部分是你的窗體要顯示的部分,如圖 具體實現的關鍵 如下 irregularform1 irregu...

QT實現不規則窗體

看到網上有很多不規則窗體的實現,效果很酷.於是使用qt也實現了乙個,qt的不規則窗體實現非常簡單,只需要設定乙個mask 遮掩 這個的格式可以使用png或bmp格式,我使用了png格式,預設窗體是矩形的,使用png影象,將需要隔離在窗體之外的區域的畫素設定為白色或透明色,其他顏色的區域對應顯示出來的...