代码之家  ›  专栏  ›  技术社区  ›  Aleph0

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

  •  -1
  • Aleph0  · 技术社区  · 6 年前

    我们使用Qt 5.10/C++,并且要求使用 QSlider

    我的同事希望我在用户双击滑块手柄时发出一个信号。

    如何才能做到这一点。也许我得重新实施

    bool event(QEvent *e)
    

    ,但我不知道怎么开始。

    1 回复  |  直到 6 年前
        1
  •  3
  •   Aleph0    6 年前

    工作溶液

    #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);
    
        }
    };
    
    推荐文章