如果双击滑块,如何发出信号

时间:2018-09-28 07:42:13

标签: c++ qt slider qevent

我们正在使用Qt 5.10 / C ++,并且要求我使用QSlider类来实现功能。

每当用户在滑块手柄上双击时,我的同事都希望我发出信号。

这如何实现。也许我必须重新实现

bool event(QEvent *e)

,但我不知道如何开始。

1 个答案:

答案 0 :(得分:1)

工作解决方案

借助评论,我得出了一个可行的解决方案:

#pragma once

#include <QSlider>
#include <QMouseEvent>
#include <QStyleOption>
#include <QDebug>

class DoubleClickSlider : public QSlider {
    Q_OBJECT
public:
    DoubleClickSlider(QWidget* parent = nullptr) : QSlider(parent) { };

signals:
    void sliderHandleDoubleClicked();

protected:
    void mouseDoubleClickEvent(QMouseEvent *event) override {
        QStyleOptionSlider opt;
        this->initStyleOption(&opt);
        QRect sr = this->style()->subControlRect(QStyle::CC_Slider, &opt, QStyle::SC_SliderHandle, this);

        if (sr.contains(event->pos())) {
            qDebug() << "Double clicked handle";
            emit sliderHandleDoubleClicked();
        }
        QSlider::mouseDoubleClickEvent(event);

    }
};