QStyle自定義重繪QScrollBar

簡介: QStyle自定義重繪QScrollBar(滾動條)樣式。

本博文的簡述or解決問題?

詳情: 見簡介


編程環境: win10 x64 專業版 1803

編程軟件: Qt Creator 4.8.2 (Enterprise)Qt 5.9.8


同步博文:


運行效果:


QScrollbar官方教程:

QScrollBar小部件提供垂直或水平滾動條。

滾動條是一種控件,使用戶能夠訪問比用於顯示文檔的小部件更大的文檔部分。它提供了用戶在文檔中的當前位置和可見文檔數量的可視化指示。滾動條通常配備了其他控件,以支持更精確的導航。Qt以適合每個平臺的方式顯示滾動條。

如果需要在另一個小部件上提供滾動視圖,使用QScrollArea類可能更方便,因爲它提供了一個viewport小部件和滾動條。如果您需要爲使用QAbstractScrollArea的特定小部件實現類似的功能,QScrollBar非常有用;例如,如果您決定子類化QAbstractItemView。對於使用滑塊控件在給定範圍內獲取值的大多數其他情況,QSlider類可能更適合您的需要。

滾動條通常包括四個單獨的控件:滑塊、滾動箭頭和頁面控件。

滑塊提供了快速進入文檔任何部分的方法,但不支持在大型文檔中精確導航。

b.滾動箭頭是按鈕,可以用來精確地導航到文檔中的特定位置。對於連接到文本編輯器的垂直滾動條,它們通常將當前位置向上或向下移動一個“行”,並少量調整滑塊的位置。在編輯器和列表框中,“行”可能表示一行文本;在圖像查看器中,它可能意味着20個像素。

頁面控件是拖動滑塊的區域(滾動條的背景)。點擊這裏將滾動條移動到單擊一個“頁面”。這個值通常與滑塊的長度相同。

每個滾動條都有一個值,該值指示滑塊距滾動條起點的距離;這是通過value()和setValue()獲得的。此值始終位於爲滾動條定義的值範圍內,從最小()到包含最大值()。可以使用setMinimum()和setMaximum()設置可接受值的範圍。在最小值處,滑塊的頂部邊緣(垂直滾動條)或左側邊緣(水平滾動條)將位於滾動條的頂部(或左側)。在最大值處,滑塊的底部(或右側)邊緣將位於滾動條的底部(或右側)末端。

滑塊的長度通常與頁面步驟的值相關,通常表示滾動視圖中顯示的文檔區域的比例。page step是當用戶按下頁面向上和向下鍵時值的變化量,並使用setPageStep()設置。使用遊標鍵對行步驟定義的值進行更小的更改,這個數量由setSingleStep()設置。

注意,使用的值範圍與滾動條小部件的實際大小無關。在爲範圍和頁步驟選擇值時,不需要考慮這一點。

爲滾動條指定的值範圍通常與爲QSlider指定的值範圍不同,因爲需要考慮滑塊的長度。如果我們有一個100行文檔,而我們只能在一個小部件中顯示20行,那麼我們可能希望構造一個滾動條,其中頁面步驟爲20,最小值爲0,最大值爲80。這將爲我們提供一個包含五個“頁面”的滾動條。

在許多常見情況下,文檔長度、滾動條中使用的值範圍和頁面步驟之間的關係很簡單。滾動條的值範圍是通過從表示文檔長度的值中減去選定的頁面步驟來確定的。在這種情況下,下面的公式很有用:文檔長度= maximum() - minimum() + pageStep()。

QScrollBar只提供整數範圍。注意,儘管QScrollBar處理非常大的數字,但是當前屏幕上的滾動條不能有效地表示超過100,000像素的範圍。除此之外,用戶很難使用鍵盤或鼠標來控制滑塊,滾動箭頭的使用也很有限。


QScrollbar屬性理解:

若是需要重繪,查看Qt源碼,有如下幾個enum QStyle::ControlElement是關於滾動條的元素:

Constant Description
CE_ScrollBarAddPage 增加頁(在滑槽)
CE_ScrollBarSubPage 減少頁(在滑槽)
CE_ScrollBarSlider 滑塊
CE_ScrollBarAddLine 增加按鈕
CE_ScrollBarSubLine 減少按鈕
CE_ScrollBarFirst 未測出來
CE_ScrollBarLast 未測出來

使用代碼顯示如下:


開心分享:

因爲有着許許多多的熱心網友的無私分享,從他們的博客中學習成長,學會很多,故也不辭辛苦也將自己的項目或經驗整理成博客的形式,也提供給一起大家學習探討與交流

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