**自[一去、二三里]的qt 之 qsliderqslider 部件提供了乙個垂直或水平滑動條。
滑塊是乙個用於控制有界值的典型部件。它允許使用者沿水平或垂直方向移動滑塊,並將滑塊所在的位置轉換成乙個合法範圍內的值。
qslider 很少有自己的函式,大部分功能在 qabstractslider 中。最有用的函式是 setvalue(),用來設定滑塊的當前值;triggeraction() 來模擬點選的效果(對快捷鍵有用),setsinglestep()、setpagestep() 用來設定步長,setminimum() 和 setmaximum() 用於定義滾動條的範圍。
qslider 提供了一些方法來控制刻度標記。可以使用 settickposition() 來表示刻度標記的位置,使用 settickinterval() 來指定刻度的間隔;當前設定的刻度位置和間隔可以分別使用 tickposition() 和 tickinterval() 函式來查詢。
qslider 繼承了一組全面的訊號:
訊號描述
valuechanged()
當滑塊的值發生了改變,發射此訊號。tracking()確定在使用者互動時,是否發出此訊號。
sliderpressed()
當使用者按下滑塊,發射此訊號。
slidermoved()
當使用者拖動滑塊,發射此訊號。
sliderreleased()
當使用者釋放滑塊,發射此訊號。
注意:qslider只提供整數範圍。另外,儘管qslider可以處理非常大的數字,但是對於使用者來說,難以準確使用很大範圍的滑塊。
滑塊接受tab鍵的焦點,並同時提供了乙個滑鼠滾輪和鍵盤介面。鍵盤介面如下:
列舉 qslider::tickposition
這個列舉指定刻度線相對於滑塊和使用者操作的位置。常量值
描述qslider::noticks
0不繪製任何刻度線
qslider::ticksbothsides
3在滑塊的兩側繪製刻度線
qslider::ticksabove
1在(水平)滑塊上方繪製刻度線
qslider::ticksbelow
2在(水平)滑塊下方繪製刻度線
qslider::ticksleft
ticksabove
在(垂直)滑塊左側繪製刻度線
qslider::ticksright
ticksbelow
在(垂直)滑塊右側繪製刻度線
下面我們來看乙個示例。
int nmin = 0;
int nmax = 200;
int nsinglestep = 10;
// 微調框
qspinbox *pspinbox = new qspinbox(this);
pspinbox->setminimum(nmin); // 最小值
pspinbox->setmaximum(nmax); // 最大值
pspinbox->setsinglestep(nsinglestep); // 步長
// 滑動條
qslider *pslider = new qslider(this);
pslider->setorientation(qt::horizontal); // 水平方向
pslider->setminimum(nmin); // 最小值
pslider->setmaximum(nmax); // 最大值
pslider->setsinglestep(nsinglestep); // 步長
// 連線訊號槽(相互改變)
connect(pspinbox, signal(valuechanged(int)), pslider, slot(setvalue(int)));
connect(pslider, signal(valuechanged(int)), pspinbox, slot(setvalue(int)));
pspinbox->setvalue(10);
通過 setminimum() 與 setmaximum() 函式,我們將取固定到乙個合適的範圍(0 - 200),連線訊號槽後,當 qspinbox 的值發生改變時,qslider 的值也會發生相應變化;反之亦然。最後,我們使用 setvalue() 將 qspinbox 的值設定為 10,由於訊號槽已經連線,所以這時 qslider 的值也會發生改變。
樣式一併奉上:
qslider::groove:horizontal
qslider::handle:horizontal
為了演示效果,這裡我們不再採用qss樣式控制。
qslider *pslider = new qslider(this);
pslider->setorientation(qt::horizontal); // 水平方向
pslider->setminimum(nmin); // 最小值
pslider->setmaximum(nmax); // 最大值
pslider->setsinglestep(nsinglestep); // 步長
// pslider->settickinterval(40); // 設定刻度間隔
pslider->settickposition(qslider::ticksabove); //刻度在上方
由於我們的取值範圍是:0 - 200,步長為 10。所以,在繪製刻度的時候,一共有 21 個刻度點(從 0 開始,每隔步長 10 繪製乙個點,到 200 處結束)。
樣式表1
/* 首先是設定主體 */
qslider
qslider::groove:horizontal
/* 設定中間的那個滑動的鍵 */
qslider::handle:horizontal
/* 還沒有滑上去的地方 */
qslider::add-page:horizontal
/* 已經劃過的從地方 */
qslider::sub-page:horizontal
樣式表2
其實,豎直的和水平的一模一樣,只是變了名稱而已。
qslider
qslider::groove:vertical
qslider::sub-page:vertical
qslider::add-page:vertical
qslider::handle:vertical
樣式表3
qslider::groove:horizontal
qslider::sub-page:horizontal
qslider::add-page:horizontal
qslider::handle:horizontal
qslider::handle:horizontal:hover
qslider::sub-page:horizontal:disabled
qslider::add-page:horizontal:disabled
qslider::handle:horizontal:disabled
樣式表4
/* 以下是槽 */
qslider::groove:horizontal
/* 設定中間的那個滑動的鍵 */
qslider::handle:horizontal
/* 已經劃過的從地方 */
qslider::sub-page:horizontal
方法一:使用事件過濾器。
// 滑鼠點選進行滑動條滑塊定位
bool device::eventfilter(qobject *obj, qevent *event)}}
}return qobject::eventfilter(obj,event);
}
方法二:自定義滑鼠點選事件。
// 方法是滑鼠點選事件
void xslider::mousepressevent(qmouseevent *e)
參考:qt中qslider的樣式表設定
【qt】qslider點選定位的提高使用度的實現
qt中qscrollbar/qslider滑鼠點選滑條不能到達所點選的位置,只移動step距離修改
EJunGrid使用總結
1 1。0版沒有實現垂直方向上的對齊,procedure tobgui reportdesign.griddrawcelltext acanvas tcanvas const arect trect const acoord tpoint agrid tzjgrid const text strin...
SDRAM使用總結
1,sdram的位址線,在我們一般用的什麼sram啊,psram啊,ram啊,一般而言都是有多少根位址線,然後可以算出定址空間,比如有11根位址線,那定址空間就是2的11次方減1。但是sdram是分列位址和行位址的,行 列位址線是復用的,所以有時候我們看到說定址空間有多大多大,但是看看位址線怎麼就那...
assert使用總結
assert expression1 assert expression1 expression2 如果expression1為true,則不丟擲錯誤,程式正常執行,expression2也不會執行。如果expression1為false,則丟擲異常,程式中斷跳出,expression2執行。一般來...