一、环境介绍
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); }