如果双击滑块手柄如何发出信号
How to emit a signal if double clicking on slider handle
我们正在使用 Qt 5.10/C++,我被要求使用 QSlider
class.
实现一个功能
我的同事希望我在用户双击滑块手柄时发出信号。
如何实现。也许我必须重新实现
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);
}
};
我们正在使用 Qt 5.10/C++,我被要求使用 QSlider
class.
我的同事希望我在用户双击滑块手柄时发出信号。
如何实现。也许我必须重新实现
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);
}
};