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

2022-01-07 14:08:24 浏览数 (1)

一、环境介绍

QT版本: 5.12.6

二、 实现方法

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

在主界面的类里重载eventFilter函数,拦截鼠标事件。

代码语言:javascript复制
//主线程
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);
}

0 人点赞