以独立于小部件大小的特定大小导出 QChartView

问题描述

我尝试将 QChartView 保存为 pdf 文件格式。

void ExportResult::printAsPdf(QString fileName,QChartView* chartView)
{
    QPrinter printer(QPrinter::ScreenResolution);
    printer.setOutputFormat(QPrinter::PdfFormat);
    printer.setFullPage(true);
    printer.setPageOrientation(QPageLayout::Landscape);
    printer.setOutputFileName(fileName);
    printer.setPageMargins(QMarginsF(0,0),QPageLayout::Point);
    printer.setPageSize(QPageSize(QSizeF(400,700),QPageSize::Point));

    QPainter painter(&printer);
    painter.setRenderHint(QPainter::Antialiasing);
    (*chartView->scene()).render(&painter);
}

但是我有一个问题。输出的大小取决于屏幕大小和分辨率。如何以独立于小部件大小的特定大小保存 chartView

小部件大小:

enter image description here

输出文件预期大小:

enter image description here

我有一个解决方案,但我认为它不够好:

void ExportResult::printAsPdf(QString fileName,QChartView* chartView)
{
    QSize minSize = chartView->minimumSize();
    QSize maxSize = chartView->maximumSize();
    chartView->setMinimumSize(600,450);
    chartView->setMaximumSize(600,450);
     QThread::sleep(1);

    QPrinter printer(QPrinter::ScreenResolution);
    printer.setOutputFormat(QPrinter::PdfFormat);
    printer.setFullPage(true);
    printer.setPageOrientation(QPageLayout::Landscape);
    printer.setOutputFileName(fileName);
    printer.setPageMargins(QMarginsF(0,QPageLayout::Point);
    printer.setPageSize(QPageSize(QSizeF(450,600),QPageSize::Point));

    QPainter painter(&printer);
    painter.setRenderHint(QPainter::Antialiasing);
    (*chartView->chart()->scene()).render(&painter);

    chartView->setMinimumSize(minSize);
    chartView->setMaximumSize(maxSize);
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...