天天看点

QT应用编程: QSlider设置滚动块定位到鼠标点击的地方

一、环境介绍

QT版本:  5.12.6

二、 实现方法

在UI界面拖一个horizontalSlider控件,方便测试。

QT应用编程: QSlider设置滚动块定位到鼠标点击的地方
在主界面的类里重载eventFilter函数,拦截鼠标事件。

//主线程
class Widget : public QWidget
{
    Q_OBJECT
 
public:
    ....................
private slots:
    ....................
 
protected:
    bool eventFilter(QObject *obj, QEvent *event);
private:
    Ui::Widget *ui;
};
 
 
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    ui->horizontalSlider_2->installEventFilter(this);
    ...................略.................................
}
 
 
bool Widget::eventFilter(QObject *obj, QEvent *event)
{
    //解决QSlider点击不能到鼠标指定位置的问题
    if(obj==ui->horizontalSlider_2)
    {
        if (event->type()==QEvent::MouseButtonPress)           //判断类型
        {
            QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(event);
            if (mouseEvent->button() == Qt::LeftButton) //判断左键
            {
               int value = QStyle::sliderValueFromPosition(ui->horizontalSlider_2->minimum(), ui->horizontalSlider_2->maximum(), mouseEvent->pos().x(), ui->horizontalSlider_2->width());
               ui->horizontalSlider_2->setValue(value);
            }
        }
    }
    return QObject::eventFilter(obj,event);
}      
QT应用编程: QSlider设置滚动块定位到鼠标点击的地方

继续阅读