首先設定autofillbackground 屬性為真
然後定義乙個qpalette 物件
設定qpalette 物件的背景屬性(顏色或)
最後設定qwidget 物件的palette
例項:qwidget *widget = new qwidget;
widget->setautofillbackground(true);
qpalette palette;
palette.setcolor(qpalette::background, qcolor(192,253,123));
qbrush(qpixmap(":/background.png")));
widget>setpalette(palette);
window.setwindowflags( qt::framelesswindowhint);
即可setwindowflags(qt::framelesswindowhint | qt::windowstaysontophint);
可前端顯示
this
->
setfixedsize( 480 , 800 );
this.setwindowopacity(0.5);
mainwindow.setwindowflags( qt::tool | qt::staysontophint ); //保持在最前面可選
一. 背景刷成黑色, 前景色設為白色。 方法一、paltette 方式,經測試,該方法不會影響到其他控制項, 推薦使用
qpalette bgpal = palette();
bgpal.setcolor (qpalette::background, qcolor (0, 0 , 0, 255));
(qpalette::background, qt::transparent);
bgpal.setcolor (qpalette::foreground, qcolor (255,255,255,255)); setpalette (bgpal);
方法二、stylesheet 方式 影響子控制項的方法是:
setstylesheet ("background-color: rgb(0,0,0);color: rgb(255,255,255);");
不影響子控制項的方法是:
setstylesheet ("venus--titlebar ");
二. 圓角控制項 用stylesheet 方式
setstylesheet ("border:2px groove gray;border-radius:10px;padding:2px 4px;");
三. 圓角視窗roundrectwin::roundrectwin() 注意:mask 的圖多餘部分設為白色
四. 半透明視窗
1. 視窗整體透明,但是窗體上的控制項不透明。 通過設定窗體的背景色來實現,將背景色設定為全透。qpalette pal = palette();
pal.setcolor(qpalette::background, qcolor(0x00,0xff,0x00,0x00)); setpalette(pal); 試驗效果:
窗體標題欄不透明;
窗體客戶區上的控制項不透明,qlabel 控制項只是字顯示,控制項背景色透明; 窗體客戶區完全透明。
另外從網上看到的方法:setattribute(qt::wa_translucentbackground, true) ; 試驗的結果是類似於上面的方法,但有時候窗體會被一些雜色斑點填充,未找到原因。
2. 視窗及其上面的控制項都半透明:
setwindowopacity(0.7)
試驗效果:視窗及控制項都半透明。注意不能夠setwindowflags(qt::framelesswindowhint); 要不就不起作用
3. 視窗整體不透明,區域性透明:
在paint 事件中使用clear 模式繪圖。
void testwindow::paintevent( qpaintevent* )
試驗效果:繪製區域全透明。如果繪製區域有控制項不會影響控制項。
以上實驗均是基於directfb 的qte 測試。在linux 下及windows 下效果會略有不同。 比如在windows 下第3 個實驗,繪製區域就是乙個黑窟窿,如果window 本身半透,則是window 下面的內容加上半透效果,不是全透明效果。
五. 控制qpixmap 的alpha
qpixmap temp(pixmaptop.size()); temp.fill(qt::transparent);
qpainter p(&temp);
p.setcompositionmode(qpainter::compositionmode_source);
p.drawpixmap(0, 0, pixmaptop);
p.setcompositionmode(qpainter::compositionmode_destinationin);
p.fillrect(temp.rect(), qcolor(0, 0, 0, alpha)); //--lable 顯示前景ui->label->setscaledcontents(true);
ui->label->setpixmap(temp);
六. layout 的邊界layout->setmargin (0);
virtual void enterevent ( qevent * event )
Qt小技巧集錦
除了 和 還可以使用下面的方式注釋 if 0 需要注釋的 endif 使用c語言全域性巨集輸出除錯資訊所在檔案 行號 define cout qdebug file line 建構函式中 cout 結果如圖 注意 file和line兩邊各是兩個下劃線 當然,也可以直接用qdebug輸出 檔案 行號 ...
小故事集錦
一 用人之道 去過廟的人都知道,一進廟門,首先是彌陀佛,笑臉迎客,而在他的北面,則是黑口黑臉的韋陀。但相傳在很久以前,他們並不在同乙個廟裡,而是分別掌管不同的廟。彌樂佛熱情快樂,所以來的人非常多,但他什麼都不在乎,丟三拉四,沒有好好的管理賬務,所以依然入不敷出。而韋陀雖然管賬是一把好手,但成天陰著個...
matlab知識集錦
灰度影象擊中與擊不中運算 影象灰度拉伸的作用 灰度拉伸又叫對比度拉伸,它是最基本的一種灰度變換,使用的是最簡單的分段線性變換函式,它的主要思想是提高影象處理時灰度級的動態範圍。它可以有選擇的拉伸某段灰度區間以改善輸出影象。如圖,所示的變換函式的運算結果是將原圖在a到b之間的灰度拉伸到c到d之間。如果...