QT 關於顏色的總結

2021-08-10 11:40:22 字數 3612 閱讀 6669

一般的屬於qwidget子類的一些控制項,可以直接使用樣式表,例如

label->setstylesheet("color:white");

qpalette類相當於對話方塊或是控制項的調色盤,它管理著控制項或窗體的所有顏色資訊,每個窗體或控制項都包含乙個qpalette物件,在顯示時按照它的qpalette物件中對各部分各狀態下的顏色的描述來進行繪製。就像油漆匠的油漆計畫,當要刷牆時,到計畫中去查一下牆需要刷成什麼顏色。採用這種方式可以很方便地對窗體的各種顏色資訊進行管理。

qpalette類有兩個基本的概念,乙個是colorgroup,另乙個是colorrole。

colorgroup指的是3中不同的狀態,包括一下幾種。qpalette::active:獲得焦點的狀態。qpalette::inactive:未獲得焦點的狀態。qpalette::disable:不可用狀態。通常情況下,active狀態與inactive狀態下顏色顯示是一致的,當然也可根據需要設定成不一樣的顏色

colorrole指的是顏色主題,即對窗體中不同部位顏色的分類,如qpalette::window是指背景色,qpalette::windowtext指的是前景色等。

qpalette::setcolor()函式對某個主題的顏色及狀態進行設定。

qpalette::setbrush()函式對顯示進行更改,這樣就有可能使用而不僅僅是單一的顏色來對主題進行填充了。

qpalette::setcolor(colorrole r,const qcolor &c);對某個主題顏色進行設定,並不區分狀態

qpalette::setcolor(colorgroup gr,colorrole r,const qcolor &c);對主題顏色進行設定的同時還區分了狀態。

***->setautofillbackground(true);

qpalette p=***->palette();

p.setcolor(qpalette::window,color);

***->setpalette(p);

qt之前版本中有關背景色設定的函式如setbackgroundcolor()或是前景色設定的函式如setforegroundcolor()在qt4中都被廢止,統一由qpalette類進行管理。

注意要先呼叫setautofillbackground(true)設定窗體自動填充背景。如:

ui->label->setautofillbackground(true); 

ui->label->setpalette(qcolor(list.at(1).toint(),list.at(2).toint(),list.at(3).toint(),list.at(4).toint()));

ui->label->setpalette(qt::blue);

qpalete::window,通常指視窗部件的背景色;

qpalette:windowtext,通常指視窗不見的前景色;

qpalette::base,指文字輸入視窗部件(比如qtextedit,qlinedit等)保利地產的背景色.//應該用這個的

qpalette::text,與qpalette::base一塊使用,指文字輸入視窗部件的盜夢空間前景色;

qpalette::button,指按鈕視窗部件的背景色;

qpalette::buttontext,指按鈕視窗部件的前景色

一. 背景刷成黑色,前景色設為白色。 方法一、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: #000000;color: #ffffff;");

不影響子控制項的方法是:

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);

Qt關於顏色的雜談

一般的屬於qwidget子類的一些控制項,可以直接使用樣式表,例如 label setstylesheet color white qpalette類相當於對話方塊或是控制項的調色盤,它管理著控制項或窗體的所有顏色資訊,每個窗體或控制項都包含乙個qpalette物件,在顯示時按照它的qpalette...

關於 unity 中顏色空間問題的總結

首先官方文件肯定是我們參考的重點,最重要的就是這幾篇文章了 這裡總結一下用法 有乙個大前提是,顯示器在顯示顏色前,總是會進行一次gamma矯正。首先是對非線性輸入的紋理資源的處理 這裡主要指的是貼圖,像法線一類的資訊紋理理論上只是為了放資料用的,可以算是線性的 在2017版本中紋理資源上的那個 sr...

關於QT呼叫系統字型 顏色提示框

qt中可以直接呼叫系統字型 顏色 大小等提示框,通過按鈕單擊觸發彈出,將ui裡的內容顯示設定的顏色。獲取現有顏色 qcolor inintcolor pal.color qpalette text qcolor color qcolordialog getcolor inintcolor,this ...