QT 中自定義QScrollBar 風格(寬度、滑塊大小等)

            最近在Qt上做應用程序開發時需要對一個文本編輯框的滾動條進行設置,在網絡上查閱了很多網友的意見,多次嘗試驗證後終於達到目標,現記錄整理本次試驗的過程,以便參考查閱。

       本人在應用程序中封裝PeTextEditor 類用來編輯、加載文本,文本編輯器右側的滾動條的滑塊會根據內容大小進行放大和縮小,當加載文本文件很大時,滑塊很小不方便手動操作,故需對滾動條的格式進行修改設計。

       Qt設置滾動條樣式的方式有兩種,一種直接在程序中寫,適用於樣式不多的情況;另一種,寫入到文件中,適用用樣式較大且需要提供換膚功能的情況。

         1.寫入到文件中,新建scrollBar.qss文件,然後編輯以下內容:

// 設置垂直滾動條基本樣式
QScrollBar:vertical { width:8px; background:rgba(0,0,0,0%); margin:0px,0px,0px,0px; padding-top:9px; // 留出9px給上面和下面的箭頭 padding-bottom:9px; } QScrollBar::handle:vertical { width:8px; background:rgba(0,0,0,25%); border-radius:4px; // 滾動條兩端變成橢圓 min-height:20; } QScrollBar::handle:vertical:hover { width:8px; background:rgba(0,0,0,50%); // 鼠標放到滾動條上的時候,顏色變深 border-radius:4px; min-height:20; } QScrollBar::add-line:vertical // 這個應該是設置下箭頭的,3.png就是箭頭 { height:9px;width:8px; border-image:url(:/images/a/3.png); subcontrol-position:bottom; } QScrollBar::sub-line:vertical // 設置上箭頭 { height:9px;width:8px; border-image:url(:/images/a/1.png); subcontrol-position:top; } QScrollBar::add-line:vertical:hover // 當鼠標放到下箭頭上的時候 { height:9px;width:8px; border-image:url(:/images/a/4.png); subcontrol-position:bottom; } QScrollBar::sub-line:vertical:hover // 當鼠標放到下箭頭上的時候 { height:9px;width:8px; border-image:url(:/images/a/2.png); subcontrol-position:top; } QScrollBar::add-page:vertical,QScrollBar::sub-page:vertical // 當滾動條滾動的時候,上面的部分和下面的部分 { background:rgba(0,0,0,10%); border-radius:4px; }

         在程序中讀取文件,調用文件中的設置,代碼如下:

QFile file(":/scrollbar.qss");
file.open(QFile::ReadOnly);
listWidget->verticalScrollBar()->setStyleSheet(file.readAll());
       這樣即可把界面上滾動條設置成文件中設計的格式。


2.直接在程序中設置,適用於不復雜的格式,本次試驗就是直接寫入程序中,代碼示例如下:

    textEdit->verticalScrollBar()->setStyleSheet(

                                                 "QScrollBar{ background: #F0F0F0; width:30px ;margin-top:16px;margin-bottom:16px }"
                                                 "QScrollBar::handle:vertical{ background: #EAEAED; min-height: 80px ;width:30px }"
                                                 "QScrollBar::sub-line:vertical{height:16px;subcontrol-position:top;subcontrol-origin:margin;}"
                                                 "QScrollBar::add-line:vertical{height:16px;subcontrol-position:bottom;subcontrol-origin:margin;}"
                                                 );

       這樣就能把設置滾動條的寬度、滑塊大小及上下邊緣箭頭。需要其他設計可參考上述文件中設計的詳細格式。

特別注意:

       在設置滑塊屬性時,一定要先設置QScrollBar 和 QScrollBar::handle:vertical 的背景顏色或圖片,不然設置其他屬性不生效,親測可用。


本文針對垂直滾動條進行示例說明,水平滾動條也類似。只需要把vertical 換成 horizontal 即可。


        







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