【问题标题】:render QChartView with high resolution以高分辨率渲染 QChartView
【发布时间】:2019-04-03 14:16:09
【问题描述】:

我想将 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 应该以固定分辨率(如 150dpi)或固定大小(如(500x700 像素))呈现吗?

【问题讨论】:

    标签: c++ qt rendering qtcharts


    【解决方案1】:

    您可以使用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");
    

    【讨论】:

    • chartView-&gt;render(&amp;buffer); 给出以下错误消息:error: no matching function for call to ‘QtCharts::QChartView::render(QPixmap*)’ chartView-&gt;render(&amp;buffer);
    • Ups,正确的界面需要 QPainter 而不是 QPixmap,您总是可以使用 QPainter 在 QPixmap 上绘图。
    猜你喜欢
    • 1970-01-01
    • 2014-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多