0

Today I was trying to take a picture of the QSlider handle in order to use it in an adpated QSlider widget with two handles.

This is somewhat similar to the following question: Range slider in Qt (two handles in a QSlider)

For a full fledged solution I can not use a simple image files. I tried to create the image of the QSlider by using the drawComplexControl function, but it leaves me basically with a black image.

What I'm doing wrong here? It seems so simple to me, but it is just not working.

#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();
}
4

1 回答 1

1

解决方案非常简单。我只是忘了补充:

sliderOption.initFrom(slider);
于 2019-03-05T08:39:40.300 回答