今天,我试图为QSlider手柄拍照,以便在带有两个手柄的自适应QSlider小部件中使用它。

这有点类似于以下问题:Range slider in Qt (two handles in a 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();
}

最佳答案

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

sliderOption.initFrom(slider);

关于c++ - 使用drawComplexControl检索QSliderHandle图像,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54998349/

10-09 07:29