Как подать сигнал, если дважды щелкнуть на ручке слайдера - PullRequest
0 голосов
/ 28 сентября 2018

Мы используем Qt 5.10 / C ++, и меня попросили реализовать функцию с использованием класса QSlider.

Мой коллега хочет, чтобы я излучал сигнал всякий раз, когда пользователь выполняет двойной щелчок мышью поручка ползунка.

Как это может быть достигнуто.Может быть, мне нужно переопределить

bool event(QEvent *e)

, но я не знаю с чего начать.

1 Ответ

0 голосов
/ 01 октября 2018

Рабочий раствор

С помощью комментариев я получил рабочее решение:

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

    }
};
...