QWidget背景 透明 問題

2021-06-29 01:37:26 字數 3854 閱讀 7368

2023年12月13日 星期一 11:13

一. 背景設定為成黑色,前景色設為白色。 方法一、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);

qwidget背景(透明)問題

2023年12月13日 星期一 11:13

一. 背景設定為成黑色,前景色設為白色。 方法一、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);

qwidget 透明窗體

1 設定窗體的背景色 在建構函式裡新增 需要新增標頭檔案qpalette或qgui qpalette pal palette pal.setcolor qpalette background,qcolor 0x00,0xff,0x00,0x00 setpalette pal 通過設定窗體的背景色來實...

QWidget實現透明的方式

qwidget實現透明的方式 this setwindowflags qt framelesswindowhint this setattribute qt wa translucentbackground,true 重寫qwidget的paintevent qpaintevent event 函式...

IOS背景半透明漸變問題

問題描述 給乙個層設定半透明的背景,使用 background linear gradient to bottom,transparent,ffffff 其中使用transparent的時候 在安卓上顯示正常 白色半透明,但ios上顯示透明漸變會出現灰色,所以不能直接寫成transparent。解決...