帶有兩個(gè)滑塊的QSlider
項(xiàng)目中用到了一組范圍,可是Qt中自帶的QSlider只有一個(gè)滑塊,不滿足需求,需要實(shí)現(xiàn)一個(gè)帶有兩個(gè)滑塊的Slider。

2019-03-19_120604.jpg
經(jīng)過一番搜索,發(fā)現(xiàn)了一個(gè)叫做 Qt Extension Library的庫,其中包含了一個(gè)QxtSpanSlider的QSlider的重寫實(shí)現(xiàn),這個(gè)類滿足了需求。
使用方法
首先在界面上引用一個(gè)QSlider類,如下圖

2019-03-19_121840.jpg
然后在QSlider上,右鍵:

2019-03-19_122030.jpg

2019-03-19_122101.jpg
提升類的名稱填入QxtSpanSlider,頭文件自動(dòng)生成的為小寫,改為QxtSpanSlider.h

2019-03-19_122222.jpg
點(diǎn)擊添加,提升后運(yùn)行程序:

2019-03-19_122512.jpg
代碼
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->lineEdit->setText("10");
ui->lineEdit_2->setText("200");
ui->horizontalSlider->setHandleMovementMode(QxtSpanSlider::NoOverlapping);//設(shè)置兩個(gè)滑塊的模式
ui->horizontalSlider->setMaximum(200);//最大值設(shè)置
ui->horizontalSlider->setLowerValue(10);//初始化小滑塊的值
ui->horizontalSlider->setUpperValue(200);//初始化大滑塊的值
connect(ui->horizontalSlider,SIGNAL(lowerValueChanged(int)),this,SLOT(lowerValueChangedSlot(int)));
connect(ui->horizontalSlider,SIGNAL(upperValueChanged(int)),this,SLOT(upperValueChangedSlot(int)));
connect(ui->lineEdit,SIGNAL(textChanged(QString)),this,SLOT(lowerTextChangedSlot(QString)));
connect(ui->lineEdit_2,SIGNAL(textChanged(QString)),this,SLOT(upperTextChangedSlot(QString)));
}
- setHandleMovementMode
enum HandleMovementMode
{
FreeMovement,//兩個(gè)滑塊自由移動(dòng)
NoCrossing, //左側(cè)滑塊不能越過右側(cè)滑塊,但是兩個(gè)滑塊可以重疊
NoOverlapping //左側(cè)不能越過右側(cè),且不能重疊
};
- lowerValueChanged
滑塊的兩個(gè)值改變后會(huì)發(fā)出信號(hào)lowerValueChanged和upperValueChanged