QT 小知識集錦

2022-03-29 19:09:34 字數 2686 閱讀 7442

首先設定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之間。如果...