一、QSlider 的構造函數:
1、QSlider(QWidget * parent = 0):創建一個滑塊,指定其父對象。默認垂直方向。
2、QSlider(Qt::Orientation orientation, QWidget * parent = 0):創建指定方向的滑塊
// 創建一個水平的滑塊
QSlider *horizontalSlider = new QSlider(Qt::Horizontal, this);
// 設定滑塊的起始位置,以及寬和高
horizontalSlider->setGeometry(10, 10, 100, 20);
// 創建一個垂直的滑塊
QSlider *verticalSlider = new QSlider(Qt::Vertical, this);
// 設定滑塊的起始位置,以及寬和高
verticalSlider->setGeometry(10, 50, 20, 100);
二、QSlider 的常用方法 和 常用屬性:
1、設置 slider 的方向:
// 設置滑塊爲水平方向
// setOrientation 屬於槽函數方法
verticalSlider->setOrientation(Qt::Horizontal);
// 通過對應的屬性獲取 slider 的方向
int orien = verticalSlider->orientation();
2、設置最大值和最小值:
// 設置最大值
horizontalSlider->setMaximum(50);
// 設置最小值
horizontalSlider->setMinimum(20);
// 獲取最大值
int max = horizontalSlider->maximum();
// 獲取最小值
bool min = horizontalSlider->minimum();
還可以通過槽函數方法 void setRange(int min, int max) 設置 slider 的最大值和最小值。
3、設置移動的步長:
slider 提供了兩個自然的步長;較大的步長用 pageStep 表示,相當於按下鍵盤上的 PageDown 和 PageUp;較小的步長用 singleStep 表示,相當於按下鍵盤上的上、下鍵;
設置 pageStep 步長:即移動每頁的步長
// 設置移動每頁的步長,滑塊提供的兩個自然步長中較大的那一個,相當於鍵盤上的 PageUp 和 PageDown;
horizontalSlider->setPageStep(10);
// 獲取 每頁的步長
int step = horizontalSlider->pageStep();
設置 singleStep 步長:即單步移動的步長
// 設置移動單步的步長,滑塊提供的兩個自然步長中較小的那一個,相當於鍵盤上的上、下箭頭;
horizontalSlider->setSingleStep(2);
// 獲取 單步的步長
int step =horizontalSlider->singleStep();
4、設置 slider 的位置:
// 設置滑塊的位置:該方法與 setValue() 槽函數功能相同
horizontalSlider->setSliderPosition(33);
// 獲取滑塊的位置
int pos = horizontalSlider->sliderPosition();
qDebug() << QString::number(pos);
5、設置 slider 的值:
// 設置 slider 的值:
// 當 slider 的值改變時,也會改變 sliderPosition 的值(即 slider 的位置改變)
// setValue() 是槽函數,不是公共方法;
horizontalSlider->setValue(33);
// 獲取 slider 的值
int value = horizontalSlider->value();
6、設置 slider 的值進行反轉: 即如果是水平方向的 slider,默認情況下,最小值在最左邊,最大值在最右邊,但是設置 slider 的值進行反轉後,最小值變到了最右邊,最大值改到了最左邊:
// 設置 slider 的值進行反轉:
horizontalSlider->setInvertedAppearance(true);
如果是垂直方向的 slider,默認最小值在底部,最大值在頂部;設置 slider 的值進行反轉後,最大值在底部,最小值變到了頂部。
可以通過 invertedAppearance 屬性獲取 slider 值是否進行反轉了:
bool isInvertedAppearance = horizontalSlider->invertedAppearance();
7、設置是否啓用滑塊追蹤:
// 設置是否啓動滑塊追蹤:true 表示啓動追蹤;false 表示禁用追蹤;
// 如果啓用了滑塊追蹤,則滑塊在拖動過程中會一直觸發 valueChanged 信號;
// 如果禁用了滑塊追蹤,則滑塊在拖動過程中不會觸發 valueChanged 信號,
// 只有在用戶釋放滑塊時,才觸發 valueChanged 信號。
horizontalSlider->setTracking(true);
// 可以通過 hasTracking 屬性獲取是否啓用了追蹤:
bool isTrack = horizontalSlider->hasTracking();
三、QSlider 的信號:
1、void actionTriggered(int action):表示當 slider 有動作發生時觸發的信號。slider 的動作有 SliderSingleStepAdd、SliderSingleStepSub、SliderPageStepAdd、SliderPageStepSub、SliderToMinimum、SliderToMaximum 和 SliderMove。當信號發出時,sliderPosition 已經根據動作進行了調整,但是值還沒有傳播(這意味着 valueChanged() 信號還沒有發出),並且可視化顯示還沒有更新。因此,在連接到此信號的槽中,您可以根據操作和滑塊的值自己調用 setSliderPosition() 來安全地調整任何操作。
2、void rangeChanged(int min, int max):當 slider 的取值範圍發生變化時觸發的信號;其中參數 min 表示新的最小值,參數 max 表示新的最大值。
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
// 創建一個水平的滑塊
horizontalSlider = new QSlider(Qt::Horizontal, this);
// 設定滑塊的起始位置,以及寬和高
horizontalSlider->setGeometry(10, 10, 100, 20);
// 當 slider 的取值範圍發生變化時觸發的信號
connect(horizontalSlider, &QSlider::rangeChanged, [=](int min, int max){
qDebug() << "新的最小值:" << QString::number(min);
qDebug() << "新的最大值:" << QString::number(max);
});
}
void Widget::on_pushButton_clicked()
{
// 設置 slider 新的取值範圍
horizontalSlider->setRange(20, 30);
}
點擊按鈕時,設置 slider 新的取值範圍,觸發 rangeChanged 信號,打印如下內容:
3、void sliderMoved(int value):當 slider 移動時觸發的信號。
// 當 slider 移動時觸發的信號:參數表示 slider 當前的值
connect(horizontalSlider, &QSlider::sliderMoved, [=](int value){
qDebug() << "slider 當前的值:" << QString::number(value);
});
4、void valueChanged(int value):當 slider 的值發生改變時觸發的信號。
注意:當設置 slider 禁用追蹤的時候,slider 在拖拽過程中不觸發 valueChanged 信號,只有當用戶釋放 slider 的時候,纔會觸發 valueChanged 信號。
當 slider 啓用追蹤的時候,valueChanged 信號 和 sliderMoved 信號效果一樣。
5、void sliderPressed() 和 void sliderReleased() 表示用戶按下 slider 和釋放 slider 觸發的信號。