當鼠標選中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。
原文博客地址: