Qt學習筆記(二十六):QSlider 的常用方法


一、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 觸發的信號。  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章