QT_QSlider的總結


鼠標選中QSlider 上時,通過點擊的數值為setpageStep();通過左右方向鍵按鈕移動的數值為setsingleStep().

鼠標滾輪上面兩者都不行,不知道是什么原因!

應用:

  http://www.cnblogs.com/wjy-lulu/p/6435009.html

簡述

  QSlider部件提供了一個垂直或水平滑動條。

  滑塊是一個用於控制有界值的典型部件。它允許用戶沿水平或垂直方向移動滑塊,並將滑塊所在的位置轉換成一個合法范圍內的值。

詳細描述

QSlider很少有自己的函數,大部分功能在QAbstractSlider中。最有用的函數是setValue(),用來設置滑塊的當前值;triggerAction()來模擬點擊的效果(對快捷鍵有用),setSingleStep()、setPageStep()用來設置步長,setMinimum()和setMaximum()用於定義滾動條的范圍。

QSlider提供了一些方法來控制刻度標記。可以使用setTickPosition()來表示刻度標記的位置,使用setTickInterval()來指定刻度的間隔;當前設置的刻度位置和間隔可以分別使用tickPosition()和tickInterval()函數來查詢。

QSlider繼承了一組全面的信號:

信號 描述
valueChanged() 當滑塊的值發生了改變,發射此信號。tracking()確定在用戶交互時,是否發出此信號。
sliderPressed() 當用戶按下滑塊,發射此信號。
sliderMoved() 當用戶拖動滑塊,發射此信號。
sliderReleased() 當用戶釋放滑塊,發射此信號。

 

QSlider只提供整數范圍。

注意:盡管QSlider可以處理非常大的數字,但是對於用戶來說,難以准確使用很大范圍的滑塊。

滑塊接受Tab鍵的焦點,並同時提供了一個鼠標滾輪和鍵盤接口。鍵盤接口如下:

    • Left/Right 移動水平滑塊一個步長。
    • Up/Down 移動垂直滑塊一個步長。
    • PageUp 上移一頁。
    • PageDown 下移一頁。
    • Home 移動至起始位置(最小值)。
    • End 移動至結束位置(最大值)

刻度位置

枚舉 QSlider::TickPosition

這個枚舉指定刻度線相對於滑塊和用戶操作的位置。

常量 描述
QSlider::NoTicks 0 不繪制任何刻度線
QSlider::TicksBothSides 3 在滑塊的兩側繪制刻度線
QSlider::TicksAbove 1 在(水平)滑塊上方繪制刻度線
QSlider::TicksBelow 2 在(水平)滑塊下方繪制刻度線
QSlider::TicksLeft TicksAbove 在(垂直)滑塊左側繪制刻度線
QSlider::TicksRight TicksBelow 在(垂直)滑塊右側繪制刻度線

基本使用

下面我們來看一個示例,結合QSlider與上節分享的QSpinBox(微調框),來讓他們彼此之間相互更新。

效果

這里寫圖片描述

源碼

 

 1 int nMin = 0;
 2 int nMax = 200;
 3 int nSingleStep = 10;
 4 
 5 // 微調框
 6 QSpinBox *pSpinBox = new QSpinBox(this);
 7 pSpinBox->setMinimum(nMin);  // 最小值
 8 pSpinBox->setMaximum(nMax);  // 最大值
 9 pSpinBox->setSingleStep(nSingleStep);  // 步長
10 
11 // 滑動條
12 QSlider *pSlider = new QSlider(this);
13 pSlider->setOrientation(Qt::Horizontal);  // 水平方向
14 pSlider->setMinimum(nMin);  // 最小值
15 pSlider->setMaximum(nMax);  // 最大值
16 pSlider->setSingleStep(nSingleStep);  // 步長
17 
18 // 連接信號槽(相互改變)
19 connect(pSpinBox, SIGNAL(valueChanged(int)), pSlider, SLOT(setValue(int)));
20 connect(pSlider, SIGNAL(valueChanged(int)), pSpinBox, SLOT(setValue(int)));
21 
22 pSpinBox->setValue(10);

 

 

 

 

通過setMinimum()與setMaximum()函數,我們將取固定到一個合適的范圍(0 - 200),連接信號槽后,當QSpinBox的值發生改變時,QSlider的值也會發生相應變化;反之亦然。最后,我們使用setValue()將QSpinBox的值設置為10,由於信號槽已經連接,所以這時QSlider的值也會發生改變。

QSS

樣式一並奉上:

 

 1 QSlider::groove:horizontal {
 2           height: 6px;
 3           background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: , stop: 0 rgb(124, 124, 124), stop: 1.0 rgb(72, 71, 71));
 4  }
 5   QSlider::handle:horizontal {
 6           width: 1px;
 7           background: rgb(0, 160, 230);
 8           margin: -6px 0px -6px 0px;
 9           border-radius: 9px;
10  }

 

 

 

 

刻度位置及間隔

    為了演示效果,這里我們不再采用QSS樣式控制。

效果:

這里寫圖片描述

源碼:

1 QSlider *pSlider = new QSlider(this); 2 pSlider->setOrientation(Qt::Horizontal);  // 水平方向
3 pSlider->setMinimum(nMin);  // 最小值
4 pSlider->setMaximum(nMax);  // 最大值
5 pSlider->setSingleStep(nSingleStep); // 步長 6 // pSlider->setTickInterval(40); // 設置刻度間隔
7 pSlider->setTickPosition(QSlider::TicksAbove);  //刻度在上方

 

由於我們的取值范圍是:0 - 200,步長為10。所以,在繪制刻度的時候,一共有21個刻度點(從0開始,每隔步長10繪制一個點,到200處結束)。

當我們使用setTickInterval(40)設置刻度間隔后,在繪制刻度的時候,就會有6個刻度點(從0開始,每隔步長40繪制一個點,到200處結束)。

如下所示:

這里寫圖片描述

也就是說,刻度點的個數 = 最大值 / 刻度間隔 + 1。

 

 

 

原文博客地址:

        http://blog.csdn.net/liang19890820


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM