Qt QSlider 使用總結

2022-02-20 13:02:39 字數 4500 閱讀 1209

**自[一去、二三里]的qt 之 qslider

qslider 部件提供了乙個垂直或水平滑動條。

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

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執行。一般來...