QSlider 的使用技巧

1、使用

对于 QSlider ,很常用的使用就是,实现 void valueChanged(int value) 的槽,从而实现修改滑块值的响应。

但是信号 void valueChanged(int value) 在移动滑块过程中是连续触发的,我们常常需要的结果是滑动到目的点再处理,

使用 void setTracking(bool enable) 接口开启或关闭滑动跟踪,通过设置 setTracking(false) 使信号 void valueChanged(int value) 在滑动过程中不被触发。

2、重写 mousePressEvent 实现滑块点哪去哪

正常情况下,点击 QSlider 滑块,只是以步进减少或增加,不能一步到位,需要实现 mousePressEvent 的重写实现。

代码

void MySlider::mousePressEvent(QMouseEvent *ev)
{
    // 获取当前点击位置,得到的这个鼠标坐标是相对于当前QSlider的坐标
    int currentX = ev->pos().x();
    // 获取当前点击的位置占整个Slider的百分比
    double per = currentX *1.0 /this->width();
    // 利用算得的百分比得到具体数字
    int value = per*(this->maximum() - this->minimum()) + this->minimum();
    qDebug() << value;
    // 设定滑动条位置
    this->setValue(value);
    // 滑动条移动事件等事件也用到了mousePressEvent,加这句话是为了不对其产生影响,是的Slider能正常相应其他鼠标事件
    QSlider::mousePressEvent(ev);
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用 `installEventFilter` 来为 `QSlider` 安装事件过滤器,可以捕获和处理滑块控件的事件。通过事件过滤器,你可以拦截并处理滑块控件的各种事件,例如鼠标点击、滑动等。 下面是一个示例代码,展示如何使用事件过滤器来监听 `QSlider` 的鼠标点击事件: ```cpp #include <QSlider> #include <QEvent> #include <QDebug> class SliderEventFilter : public QObject { Q_OBJECT public: explicit SliderEventFilter(QObject *parent = nullptr) : QObject(parent) {} protected: bool eventFilter(QObject *obj, QEvent *event) override { if (event->type() == QEvent::MouseButtonPress) { QSlider *slider = qobject_cast<QSlider*>(obj); if (slider) { qDebug() << "Slider clicked!"; // 在这里处理滑块点击事件的逻辑 return true; } } return QObject::eventFilter(obj, event); } }; ``` 在上面的示例中,我们创建了一个继承自 `QObject` 的事件过滤器类 `SliderEventFilter`。在 `eventFilter` 方法中,我们首先判断接收到的事件类型是否为鼠标按下事件(`QEvent::MouseButtonPress`),然后使用 `qobject_cast` 将对象转换为 `QSlider` 类型。如果转换成功,说明事件发生在 `QSlider` 上,我们在这里可以处理滑块点击事件的逻辑。 为了使用事件过滤器,你需要在你的代码中安装它: ```cpp QSlider *slider = new QSlider(parent); SliderEventFilter *eventFilter = new SliderEventFilter(slider); slider->installEventFilter(eventFilter); ``` 通过以上步骤,你可以成功使用事件过滤器来监听和处理 `QSlider` 的鼠标点击事件。你可以根据需要在 `eventFilter` 方法中处理其他类型的事件,以实现自定义的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值