C++ 双击滑块手柄时如何发出信号

C++ 双击滑块手柄时如何发出信号,c++,qt,slider,qevent,C++,Qt,Slider,Qevent,我们正在使用Qt5.10/C++,我被要求使用QSlider类实现一个特性 我的同事希望我在用户双击滑块手柄时发出一个信号 如何才能做到这一点。也许我必须重新实施 bool event(QEvent *e) ,但我不知道如何开始。工作解决方案 在这些评论的帮助下,我得出了一个有效的解决方案: #pragma once #include <QSlider> #include <QMouseEvent> #include <QStyleOption> #inc

我们正在使用Qt5.10/C++,我被要求使用
QSlider
类实现一个特性

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

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

bool event(QEvent *e)

,但我不知道如何开始。

工作解决方案

在这些评论的帮助下,我得出了一个有效的解决方案:

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

    }
};
#pragma一次
#包括
#包括
#包括
#包括
类DoubleClickSlider:公共QSlider{
Q_对象
公众:
双击滑块(QWidget*parent=nullptr):QSlider(parent){};
信号:
void sliderHandleDoubleClicked();
受保护的:
void mouseDoubleClickEvent(QMouseEvent*事件)重写{
QStyleOptionSlider opt;
此->initStyleOption(&opt);
QRect sr=this->style()->subcrolrect(QStyle::CC_Slider,&opt,QStyle::SC_SliderHandle,this);
如果(sr.contains(事件->位置()){

qDebug()有一个。根据文档,它似乎没有在中重载。如果从
QSlider
派生是一个选项,则可以在派生类中重载它。(否则,可以查找。)@谢夫:谢谢你的提示。我会尝试一下。从QSlider派生是我的一个选择。不客气。如果你能做一个简单的例子,不要犹豫,写一个自我回答。;-)作为覆盖
QWidget::mouseDoubleClickEvent
的替代方法,你可以在
QSlider
上。在这种情况下,我会研究一下
QStyle
:。有许多方法可以绘制控件,但您也可以找到一些方法来检索子控件的矩形。(很抱歉,没有更具体的说明-我有点赶时间。)