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

举报
DS小龙哥 发表于 2021/12/10 00:45:59 2021/12/10
【摘要】 一、环境介绍 QT版本:  5.12.6 二、 实现方法 在UI界面拖一个horizontalSlider控件,方便测试。 在主界面的类里重载eventFilter函数,拦截鼠标事件。 //主线程class Widget : public QWidget{ Q_OBJECT public: ........

一、环境介绍

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);
      }
  
 

 

文章来源: xiaolong.blog.csdn.net,作者:DS小龙哥,版权归原作者所有,如需转载,请联系作者。

原文链接:xiaolong.blog.csdn.net/article/details/110453097

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。