Использование drawComplexControl для получения изображения QSliderHandle - PullRequest
0 голосов
/ 05 марта 2019

Сегодня я пытался сфотографировать дескриптор QSlider, чтобы использовать его в виджете QSlider с двумя дескрипторами.

Это похоже на следующий вопрос: Ползунок диапазона в Qt (две ручки в QSlider)

Для полноценного решения я не могу использовать простое изображениефайлы.Я попытался создать изображение QSlider с помощью функции drawComplexControl, но оно оставляет меня в основном с черным изображением.

Что я здесь не так делаю?Мне кажется, это так просто, но просто не работает.

#include <QApplication>
#include <QPushButton>
#include <QPainter>
#include <QStyleOptionSlider>

int main(int argc, char** args) {
    QApplication app(argc, args);
    auto slider = new QSlider;
    slider->setOrientation(Qt::Orientation::Horizontal);
    slider->show();

    auto btn = new QPushButton("Create Image");
    QObject::connect(btn, &QPushButton::clicked, [&] {
        auto style = QApplication::style();
        QStyleOptionSlider sliderOptions;
        QPixmap pix(slider->size());
        auto painter = new QPainter();
        painter->begin(&pix);
        style->drawComplexControl(QStyle::CC_Slider, &sliderOptions, painter, slider);

        pix.save("SliderImage.png");
        auto handleRect = style->subControlRect(QStyle::ComplexControl::CC_Slider, &sliderOptions, QStyle::SubControl::SC_SliderHandle, slider);
        QPixmap handlePix = pix.copy(handleRect);
        handlePix.save("SliderHandleImage.png");

        painter->end();
    });
    btn->show();
    app.exec();
}

1 Ответ

0 голосов
/ 05 марта 2019

Решение было очень простым.Я просто забыл добавить:

sliderOption.initFrom(slider);
...