今天,我试图为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();
}
答案 0 :(得分:1)
解决方案非常简单。我只是忘了补充:
sliderOption.initFrom(slider);