成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Qt實現半透明窗口 嵌入桌面

移動開發
本文介紹的是Qt實現半透明窗口 嵌入桌面,窗口的一個特效,主要是有alpha值的顏色填充背景,最終的dialog實現看內容。

本文介紹的是Qt實現半透明窗口 嵌入桌面,窗口的一個特效,主要是有alpha值的顏色填充背景,最終的dialog實現看內容。

一、將Qt窗口嵌入到桌面中。

聲明一個最簡單的類:

  1. class Dialog : public QDialog  
  2.  {  
  3.          Q_OBJECT  
  4. public :  
  5.          Dialog(QWidget *parent = 0);  
  6.          ~Dialog();  
  7.  } 

函數實現:

  1. Dialog::Dialog(QWidget *parent)    : QDialog(parent)  
  2. {  
  3.         //創建個LineEdit用來測試焦點   
  4.         QLineEdit* le = new QLineEdit(this );  
  5. }  
  6.  
  7. ialog::~Dialog()  
  8. {  

主函數:

  1. int main(int argc, char *argv[])  
  2. {  
  3.         QApplication a(argc, argv);  
  4.         Dialog w;  
  5.  
  6.        HWND desktopHwnd = findDesktopIconWnd();  
  7.         if (desktopHwnd) SetParent(w.winId(), desktopHwnd);  
  8.  
  9.        w.show();  
  10.         return a.exec();  

運行效果:

Qt實現半透明窗口 嵌入桌面

有個窗口嵌入了桌面。按win+D組合鍵可以看到此窗口在桌面上。

二、讓窗口全透明:

2、最容易想到的就是setWindowOpacity()函數了。

w.setWindowOpacity(0.5),運行:結果杯具了,此函數完全無效,因為其父窗口特殊,這個函數內部使用的系統窗口標志不被支持。

2、
w.setAttribute(Qt::WA_TranslucentBackground, true);

運行效果:

Qt實現半透明窗口 嵌入桌面
 
全透明ok。如果其父窗口為空的話,透明的地方會成為黑塊。

三、讓窗口半透明

1、w.setAttribute(Qt::WA_TranslucentBackground, true) + 背景調色板

運行效果仍然是全透明,因為TranslucentBackground為true,根本不畫背景。

2、單純的背景調色板:

  1. QPalette pal = w.palette();  
  2.      pal.setColor(QPalette::Background, QColor(100,100,100,50));  
  3.      w.setPalette(pal);  
  4.      w.setAutoFillBackground(true ); 

運行效果出現了半透明:

Qt實現半透明窗口 嵌入桌面


 
但是還沒大功告成,不停點擊桌面,再點擊這個窗口,會發現這個窗口越來越不透明,直至完全不透明了。不知道是不是qt的bug。

ps:加一句 w.setAttribute(Qt::WA_OpaquePaintEvent,true); 窗口就能夠一直保持這個效果了。即這個方案可行。

pps:此方案在XP也是黑色底塊。

3、轉戰paintEvent()

  1. protected :  
  2.          void paintEvent(QPaintEvent *);  
  3.  void Dialog::paintEvent(QPaintEvent *e)  
  4.  {  
  5.          QPainter p(this );  
  6.          p.fillRect(rect(), QColor(0,0xff,0,30));  
  7.  } 

用一個帶有alpha值的顏色填充背景,運行效果發現顏色確實有alpha值,但是桌面的內容透不過來。

4、setAttribute(Qt::WA_TranslucentBackground, true) + paintEvent()

運行效果:

Qt實現半透明窗口 嵌入桌面
 
得到了設想中的效果。

最終的主函數代碼:

  1. int main(int argc, char *argv[])  
  2. {  
  3.         QApplication a(argc, argv);  
  4.         Dialog w;  
  5.  
  6.        HWND desktopHwnd = findDesktopIconWnd();  
  7.         if (desktopHwnd) SetParent(w.winId(), desktopHwnd);  
  8.  
  9.        w.setAttribute(Qt::WA_TranslucentBackground, true );  
  10.  
  11.        w.show();  
  12.         return a.exec();  

最終的dialog實現代碼:

  1.  Dialog::Dialog(QWidget *parent)    : QWidget(parent)  
  2.  {  
  3.          //創建個LineEdit用來測試焦點   
  4.          QLineEdit* le = new QLineEdit(this );  
  5.  }  
  6. Dialog::~Dialog()  
  7.  {  
  8.  }  
  9.  
  10. void Dialog::paintEvent(QPaintEvent *e)  
  11.  {  
  12.          QPainter p(this );  
  13.          p.fillRect(rect(), QColor(0,0xff,0,30));  
  14.  } 

經測試此代碼在XP運行不正常。窗口成為黑色背景塊。只能是顏色半透明了。還有就是圖標會被蓋住。只能把w.setAttribute(Qt::WA_TranslucentBackground, true );注釋掉,有半透明顏色,無法看到桌面。

小結:Qt實現半透明窗口 嵌入桌面的內容介紹完了,其實這個實例也挺簡單的,相信也能實現。最后希望本文對你有所幫助吧。

責任編輯:zhaolei 來源: 互聯網
相關推薦

2010-06-23 09:25:50

JDK 7Java開發Java

2010-09-14 09:18:28

DIVCSS

2011-06-20 16:38:33

Qt QWidget Qt4.5

2011-04-18 13:53:27

Ubuntu終端桌面

2015-07-29 16:33:12

IOS半透明引導

2015-12-21 10:49:57

Windows 10開始菜單磁貼

2012-04-17 16:19:21

蘋果

2011-06-24 09:13:30

QT SDL

2011-07-04 15:48:57

Qt 桌面

2009-07-10 11:31:45

Swing支持透明和不規則窗口

2021-07-25 20:26:01

Windows 功能系統

2011-07-04 14:11:43

QT 桌面 Embedded

2011-06-08 15:14:46

Qt 教程

2011-07-05 15:42:02

QT 嵌入式 Embedded

2009-03-05 10:16:01

Linux桌面環境窗口管理器

2011-06-13 14:00:55

Qt Designer linux

2011-07-05 15:59:18

Qt 嵌入式 linux

2011-08-29 14:10:03

QtWebkitFlash

2011-06-23 13:25:42

QT 源碼 窗口

2011-07-04 16:20:54

QT 窗口 QWidget
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 中文字幕日韩一区 | 日屁视频| 日韩欧美字幕 | 国产91丝袜| 草草精品| 日韩在线精品强乱中文字幕 | www.奇米| 日韩欧美一区二区在线播放 | 日韩欧美高清dvd碟片 | 欧美精品一区二区三区在线播放 | 久久久久久综合 | 国产精品久久在线 | 精品欧美一区二区三区精品久久 | 一片毛片| 久久久不卡网国产精品一区 | 久久久一区二区三区四区 | 毛片国产 | 久久免费精彩视频 | 亚洲视频欧美视频 | 亚洲福利在线观看 | 国产精品视频一区二区三区 | 日韩中文字幕久久 | 在线国产一区二区三区 | 男女污污动态图 | 亚洲精品中文在线观看 | 黄色免费网站在线看 | 中文字幕精品一区 | 亚洲第一av| 亚洲视频中文字幕 | 免费观看一级特黄欧美大片 | 亚洲第一天堂无码专区 | 成人a视频在线观看 | 精品国产一区二区在线 | 欧美freesex黑人又粗又大 | 高清欧美性猛交xxxx黑人猛交 | 国产精品一区二区av | 国产精品久久国产愉拍 | 九九热在线观看视频 | 欧美日韩黄色一级片 | www.嫩草 | 无毛av|