一、环境介绍
QT版本: 5.12.6
二、 实现方法
在UI界面拖一个horizontalSlider控件,方便测试。
在主界面的类里重载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);
}