一般的屬於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...
qt開發雜談
1 qt中訊號和槽有一種自動連線方式 void on 如果槽的命名是這樣的話 void on 就會自動將widget name中的訊號signal name和這個槽void on 鏈結起來。例如 void on okbutton clicked 系統就會自動將okbutton類中的訊號clicked...
qt程式設計問題雜談
1 乙個訊號可以連線多個槽,觸發一次訊號就發起了多個槽操作。2 qt下兩個執行緒之間可以用訊號和槽傳遞資料,但是當乙個執行緒一直迴圈執行,等待另乙個執行緒發來的資料的時候,當另乙個執行緒觸發了這個訊號時,如果這個執行緒一直輪循,其實屬於此執行緒的這個槽函式是不會被觸發的。3 qt下實現執行緒的函式是...