Qt樣式表的使用——設置樣式的方法

轉自:前行中的小豬

一、簡述

我們通常在使用Qt開發的過程中都會使用樣式表來美化我們的界面,關於如何使用樣式表的資料也很多,樣式表的使用方法也千變萬化。爲了搭建一個漂亮的界面那麼必須學會如何使用樣式表,Qt幫助文檔中提供了非常好的例子以及詳細介紹,非常適合學習。同時呢,也不能光看文檔中是如何設置樣式,我們要親自動手做一遍才能理解得更加透徹,好了閒話不多說,下面就我在日常開發過程中對樣式表的使用做一下簡單的總結。

二、開始總結

1、先談談我們設置樣式有幾種方法

(a)、最簡單,也是最直接——在Qt Designer 中添加樣式

這裏寫圖片描述

這裏寫圖片描述 這裏寫圖片描述


我們在編輯框中添加需要的樣式即可,然後點擊確定我們就可以看到設置的效果了,這裏我們只對QPushButton設置了樣式,那我們是不是對界面上每個控件都要單獨設置樣式呢?

當然不需要,我們可以對整個界面設置樣式,然後將所有控件的樣式都寫在其中就可以了。

這裏寫圖片描述

Qt的樣式表編輯工具可以幫助我們檢驗樣式是否編寫正確。

這裏寫圖片描述

我們看到下面設置的樣式有誤,並沒有檢測出來,但是這裏的錯誤只會影響這一條樣式無效,而不會導致整個樣式無效。我們看到右邊這張圖片QPushButton,雖然樣式寫的有問題,但是還是設置了按鈕的背景色和字體的大小。所以這裏不是所有問題都能檢測出來,如果發現設置的樣式與顯示效果不一致,那就需要好好檢查一下樣式寫的是否正確。

這裏寫圖片描述 這裏寫圖片描述


(b)、在代碼中添加樣式

// 對單個控件;
ui.pushButton->setStyleSheet("QPushButton{border-radius:5px;background:rgb(150, 190, 60);color:red;font-size:15px;}")

// 對整個界面(包括界面上所有的控件)
this->setStyleSheet("QPushButton{border-radius:5px;background:rgb(150, 190, 60);color:red;font-size:15px; \
QToolButton{border-radius:5px;background:rgb(34, 231, 131);color:brown;font-size:15px;}")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

在代碼中我們直接調用setStyleSheet方法即可對控件或者整個界面設置樣式。


(c)、將樣式寫在文件中,通過讀取文件的方式設置樣式

將樣式保存在MyStyle.qss文件中。

這裏寫圖片描述


通過以下代碼將MyStyle.qss文件中的樣式讀取出來,然後調用setStyleSheet方法設置樣式。

void loadStyleSheet(const QString &sheetName)
{
    QFile file(sheetName);
    file.open(QFile::ReadOnly);
    if (file.isOpen())
    {
        QString styleSheet = this->styleSheet();
        styleSheet += QLatin1String(file.readAll());
        this->setStyleSheet(styleSheet);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

2、再談談這幾種設置樣式方法的優缺點

(a)、最簡單,也是最直接——在Qt Designer 中添加樣式

優點:通過這種方法我們對於設置完樣式可以立馬顯示出效果(不需要編譯再運行),也可以檢測當前樣式是否編寫錯誤(只能簡單判斷,並不能對所有情況進行判斷)。同時Qt Designer也可以幫助我們快速添加樣式,見下圖。

這裏寫圖片描述

缺點:個人感覺在Qt Designer中編寫樣式不是很清晰,尤其是在樣式比較多時,不利於檢查樣式是否編寫錯誤。同時不可以二次修改,即界面顯示完畢後無法通過此方法修改界面的樣式,只能靠代碼去修改。


(b)、在代碼中添加樣式

優點:此種方法很方便,也很快捷。可以隨時設置樣式,改變樣式,根據不同條件設置不同的樣式,而不像第一、第三種方法直接設置固定樣式。

缺點:當樣式內容較複雜時,不利於查看,同時可能爲了編碼風格美觀需要將樣式內容換行等,這樣可能會導致樣式錯誤,根本沒有效果,導致需要多次調試,浪費不必要的時間。


(c)、將樣式寫在文件中,通過讀取文件的方式設置樣式

優點:這種方法在界面樣式較複雜時,我們在文件中編寫樣式,內容比較清晰,樣式編寫格式錯誤更加明顯。同時也便於修改,同時一些文件編輯器能夠自動給出樣式輸入提示,提供高編碼效率。

缺點:一般樣式表文件都會加載到程序資源文件中,所以這裏需要單獨加載一個文件。同時跟第一種方法一樣,不可以二次修改,當界面顯示完畢後,只能靠調用setStyleSheet方法再次修改。


個人建議

一般來說,我們會將第二種和第三種方法結合起來使用。通常將整個界面的樣式寫在文件中,在界面初始化時讀取並通過setStyleSheet方法設置,如果在顯示界面以後,有一些控件需要變換樣式的話在代碼中可以單獨給某一個控件調用setStyleSheet方法進行重新設置樣式。同時非常需要注意的一點是,樣式的設置以最後一次設置爲準,因爲每次設置(調用setStyleSheet(“樣式”))都會覆蓋之前一次設置的樣式,或者如果不需要覆蓋之前的樣式可以這樣寫:

void setNewStyleSheet(QString styleSheet)
{
    //獲取到原來的樣式
     QString oldStyleSheet = this->styleSheet();
     styleSheet += oldStyleSheet;
     this->setStyleSheet(styleSheet);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

第一種方法適合檢測我們寫的樣式有沒有錯誤,能夠立即看到效果,如果我們發現在代碼中設置樣式,總是顯示不了效果(每次修改都需要重新編譯,耗時),可以現在Qt Designer中測試一下樣式是否正確,在Qt Designer中修改正確後可以移至代碼中。

這裏先簡單介紹設置樣式的方法,後續文章將繼續講解Qt樣式表的使用。

PS : 今天是三八婦女節,一個屬於全中國女同胞的節日,公司許多女同事都收到了禮物,享受到了不一般的待遇。強烈要求有一個屬於我們廣大男同胞的節日,要公平對待嘛,O(∩_∩)O!。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章