setStyleSheet來設定視窗部件的樣式

2022-04-04 02:17:12 字數 3257 閱讀 5529

使用setstylesheet來設定圖形介面的外觀:

qt style sheets是乙個很有利的工具,允許定製視窗的外觀,

此外還可以用子類qstyle來完成,他的語法很大比重**於html的css,但是適用於視窗

qt將會集合所有的樣式表來設定外觀,這稱作級串聯

例如:下面的樣式表指定所有的qlineedit應該用黃色作為他們的背景顏色,所有的核對框應該用紅色作為他們的文字顏色

qlineedit

qcheckbox

對於這種定製,樣式表比palette調色盤更強大,例如使用qpalette::button role來設定乙個按鈕為紅色可能引起危險

對於單獨使用qpalette很難完成的定製,樣式表可以指定

樣式表作用於當前視窗樣式頂部,這意味這應用程式講看起來盡可能的自然,但是任何樣式表系統引數應該考慮,不像qpalette那樣,樣式表提供檢查,如果你設定了乙個按鈕的背景顏色為紅

色,你應該確定在所有的平台按鈕將會有乙個紅色的背景,除此,qt designer提供樣式表整合環境,使得在不同的視窗樣式中更容易看到樣式表的效果

此外,樣式表可以用來為你的應用程式提供乙個出眾的外觀,不需要使用子類qstyle,例如,可以指定任意的為單選按鈕和核對按鈕,來使它們出眾,使用這個技術,也可以獲得輔助的定

制,這將使用幾個子類,例如指定style hint(樣式暗示),可以參看例子 style sheet。

當樣式表有效時候,使用qwidget::style()可以返回qstyle,

樣式表語法:

樣式表語法基本和html css語法一致。

樣式表包含了樣式規則序列,樣式規則有乙個和組成,指定哪些視窗將會被這些規則影響,指定哪些屬性將會被設定在視窗上,例如

qpushbutton

在上面的,規則中,qpushbutton是,是,這個規則指定qpushbutton和他的子類將使用紅色作為前景顏色,就是字型顏色,並且對大小寫沒有分別,對於

color,color,color是一樣的。

幾個可以同時被列出,使用逗號","來分開各個,例如:

qpushbutton, qlineedit, qcombobox

部分是一對 屬性:值  對,用{}來括起來,使用分號來分開各個屬性,例如

qpushbutton

可以參看qt style sheets reference來檢視部件以及樣式表的屬性列表

關於樣式表的級聯屬性

看下面**的不同

btn1->setstylesheet("qpushbutton"); //設定前景顏色,就是字型顏色

btn1->setstylesheet("qpushbutton"); //設定背景顏色為紅色

和btn1->setstylesheet("qpushbutton");

第乙個**只能顯示黃色背景,第二個確實紅色字型,黃色背景,

所以當設定乙個部件時候,要在同乙個》setstylesheet()中完全寫出來。

源**示例:

dialog::dialog(qwidget *parent) :

qdialog(parent),

ui(new ui::dialog)

"); //設定前景顏色,就是字型顏色

//    btn1->setstylesheet("qpushbutton");

btn1->settext("button1");

btn2=new qpushbutton(this);

btn2->setstylesheet("qpushbutton"); //使用rgb來設定背景顏色

btn2->settext("button2");

btn3=new qpushbutton(this);

btn3->setstylesheet("qpushbutton");

//設定按鈕的背景,background-repeat可以設定背景的重複規則,這裡設定僅在xy方向都重複,所以會被重複一次

//background-position用來設定的位置,是左(left)還是右(right),還是在中間(center),是上(top)還是底部(bottom)

//background-attachment用來這定背景是否捲動或者和視窗大小相匹配,預設是捲動的

btn3->settext("button3");

btn4=new qpushbutton(this);

btn4->setstylesheet("qpushbutton");//設定邊框寬度以及顏色

//可以使用border-top,border-right,border-bottom,border-left分別設定按鈕的上下左右邊框,

//同樣有border-left-color, border-left-style, border-left-width.等分別來設定他們的顏色,樣式和寬度

//border-image用來設定邊框的背景。

//border-radius用來設定邊框的弧度。可以設定圓角的按鈕

btn4->settext("button4");

//字型設定

//font-family來設定字型所屬家族,

//font-size來設定字型大小

//font-style來設定字型樣式

//font-weight來設定字型深淺

//height用來設定其高低

//selection-color用來設定選中時候的顏色

edit1=new qlineedit(this);

edit1->setstylesheet("qlineedit");

//父視窗的設定

//icon-size來設定大小

this->setwindowicon(qicon("image/1.png"));

this->setstylesheet("qwidget");  //設定整個對話方塊的背景顏色

//      this->setstylesheet("qwidget");

layout1->addwidget(btn1,0,0);

layout1->addwidget(btn2,0,1);

layout1->addwidget(btn3,1,0);

layout1->addwidget(btn4,1,1);

layout1->addwidget(edit1,2,0);

}這裡只給出來widget主視窗的cpp檔案,執行得到的結果如下圖

我們看到連貼上 複製板都變成了使用樣式表來設定的樣式

關於使用樣式表 setstylesheet()) 來設定視窗樣式的時候因該注意的事項,可以參看

setStyleSheet設定相關

setstylesheet函式的引數是字串 setstylesheet background blue 背景色 setstylesheet qframe 背景 qpushbutton mypushbutton setstylesheet 這種情況下,控制項自身的樣式表的優先順序高於父控制項或應用程式...

用rfkill來控制linux下的無線裝置

很 多 計 算 機 系 統 包 含 無 線 電 傳 輸 其 中 包 括 wi fi 藍 牙 和 3g 設 備 這 些 設 備 消 耗 電 源 在 不 使 用 這 些 設 備 時 是 一 種 浪 費 rfkill 是 linux 內 核 中 的 一 個 子 系 統 它 可 提 供 一 個 界 面 在 ...

android layout weight設定解讀

參考文章 android layout weight的真實含義是 一旦view設定了該屬性 假設有效的情況下 那麼該 view的寬度等於原有寬度 android layout width 加上其在剩餘空間中的佔比!設螢幕寬度為l,在兩個view的寬度都為match parent的情況下,原有寬度為l...