1. 程式人生 > >Qt Widget 利用 Qt4.5 實現酷炫透明窗體

Qt Widget 利用 Qt4.5 實現酷炫透明窗體

技術分享 wid 並且 qlabel channel ann event fit attribute

本文講述的是Qt Widget 利用 Qt4.5 實現酷炫透明窗體,QWidget類中的每一個窗口部件都是矩形,並且它們按Z軸順序排列的。一個窗口部件可以被它的父窗口部件或者它前面的窗口部件蓋住一部分。 先來看內容吧。

Qt4.2引入了QWidget::setWindowOpacity函數, 可以為窗體設置透明度, 從0.0到1.0之間, 值越小越透明。 經過設置的窗體可以整體呈現透明的效果。 但這種設置比較粗糙, 只能設一個整體的效果,大概只有比如像拖動的時候能用一下,大多數時候都不太實用。在Qt4.5裏引入了新的窗體透明特性, 是個Widget的Attribute, 叫做Qt::WA_TranslucentBackground。 這個屬性可以為每個QWidget

單獨設置, 並且透明程度可以用繪制的顏色或圖片的Alpha Channel值來控制。

筆者寫了一個例子演示其奇妙的效果。 先看一個截圖:

技術分享

這個是筆者例子運行出來的效果, 背景是www.cuteqt.com雷人的主頁。 下面簡單介紹一下代碼的實現。

TranslucentBackground控制窗體透明屬性

例子主界面用QWidget, 其上放置四個控件, 上面兩個是自定義的QWidget子類, 用在paintEvent中繪制了一幅透明底色的圖片, 上書“CuteQt”幾個大字; 下面兩個是標準的QLabel控件, 但顯示出兩種不同的效果。

透明的控件的TranslucentBackground屬性為true (繼承了parent的屬性), 而非透明的控件則在代碼中強制將TranslucentBackground設為了false, 這樣就造就了有意思的結果。 代碼片段如下:

  1. label = new QLabel(”www.cuteqt.com”);
  2. label->setAttribute(Qt::WA_TranslucentBackground, false);
  3. label->setAutoFillBackground(true);

Alpha Channel控制透明度

將這個例子稍稍改動, 修改一下窗體背景色的Alpha值, 使之展現不同的透明度。 實現的方法是設置窗體的palette屬性, 為Background這個ColorRole的顏色設置了alpha值, 代碼片段如下:

  1. QPalette pal = palette();
  2. pal.setColor(QPalette::Background, QColor(255,0,0,200));
  3. setPalette(pal);

下圖所示為alpha值100和200的不同顯示效果。

技術分享

技術分享

怎麽樣, 這個例子挺有意思吧? 趕快下載完整的代碼學習一下吧~ 有任何不明白blog或bbs留言~

translucent.tar.gz

小結:Qt Widget 利用 Qt4.5 實現酷炫透明窗體的內容講完了,你也許也會認為實現的效果很炫吧,那麽希望本篇文章能幫助你學習。

http://mobile.51cto.com/symbian-270155.htm

Qt Widget 利用 Qt4.5 實現酷炫透明窗體