отрендерить QChartView с высоким разрешением - PullRequest
0 голосов
/ 03 апреля 2019

Я хочу сохранить QChartView как изображение .png.Поэтому я использую следующий код:

QChartView *chartView = qobject_cast<QChartView*>(/* get chart view */);

QImage image;
QPainter painter(&image);
painter.setRenderHint(QPainter::Antialiasing);
chartView->render(&painter);
image.save("test.png");

Когда я смотрю на изображение test.png, разрешение довольно плохое.

Могу ли я как-то сказать, что QChartView должен отображаться с фиксированным разрешением, например 150 точек на дюйм, или с фиксированным размером, например (500x700 пикселей)?

1 Ответ

1 голос
/ 03 апреля 2019

Вы можете масштабировать свое изображение, используя QPaintDevice::devicePixelRatioF() и используя QPixmap вместо изображения.

const auto dpr = chartView->devicePixelRatioF();
QPixmap buffer(chartView->width() * dpr, chartView->height() * dpr);
buffer.setDevicePixelRatio(dpr);
buffer.fill(Qt::transparent);

QPainter *paint = new QPainter(&buffer);
paint->setPen(*(new QColor(255,34,255,255)));
chartView->render(paint);

Как только изображение масштабируется до надлежащего разрешения, вы можете преобразовать его в QImage или сохранить его напрямую:

QFile file("image.png");
file.open(QIODevice::WriteOnly);
uffer.save(&file, "PNG");
...