帶有兩個滑塊的QSlider
項目中用到了一組范圍厂庇,可是Qt中自帶的QSlider只有一個滑塊拄氯,不滿足需求,需要實現(xiàn)一個帶有兩個滑塊的Slider它浅。
經(jīng)過一番搜索译柏,發(fā)現(xiàn)了一個叫做 Qt Extension Library的庫,其中包含了一個QxtSpanSlider的QSlider的重寫實現(xiàn)镊折,這個類滿足了需求胯府。
使用方法
首先在界面上引用一個QSlider類,如下圖
然后在QSlider上恨胚,右鍵:
提升類的名稱填入QxtSpanSlider骂因,頭文件自動生成的為小寫,改為QxtSpanSlider.h
點擊添加与纽,提升后運行程序:
代碼
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è)置兩個滑塊的模式
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,//兩個滑塊自由移動
NoCrossing, //左側(cè)滑塊不能越過右側(cè)滑塊侣签,但是兩個滑塊可以重疊
NoOverlapping //左側(cè)不能越過右側(cè)塘装,且不能重疊
};
- lowerValueChanged
滑塊的兩個值改變后會發(fā)出信號lowerValueChanged和upperValueChanged