QTextDocument中的QChart

4
我想生成一个包含文本和QChart的PDF报告。目前,我使用QTextDocument将图表作为图像添加到其中,然后使用QPdfWriter导出为PDF。
#include <QtGui>
#include <QtCore>
#include <QApplication>
#include <QtCharts/QChartView>
#include <QtCharts/QLineSeries>
using namespace QtCharts;

int main(int argc, char *argv[])
{
QApplication a(argc, argv);

// Create a chart
QLineSeries *series = new QLineSeries();
series->append(0,0);
series->append(1,1);
QChart *chart = new QChart();
chart->addSeries(series);
chart->createDefaultAxes();
chart->axisX()->setTitleText(QString("x [m]"));
chart->axisY()->setTitleText(QString("y [m]"));
chart->setTitle("Simple chart example");
chart->resize(500,500);

// Paint the chart into an image
QImage img(500,500,QImage::Format_RGB32);
QPainter painter(&img);
QChartView *chartView = new QChartView(chart);
chartView->setRenderHint(QPainter::Antialiasing);
chartView->show();
chartView->render(&painter);

// Set up pdf writer
QString filename = "myfile.pdf";
QPdfWriter writer(filename);
writer.setPageSize(QPagedPaintDevice::A4);

// Create the document
QTextDocument doc;
QTextCursor cursor(&doc);
cursor.insertText(QString("some text\n"));
cursor.insertImage(img);
// Print the document
doc.print(&writer);

return a.exec();
}

尽管它能够正常工作,但我想避免将图表转换为图像,因为这会破坏图像质量。有没有其他方法可以实现呢?
1个回答

0

如果图像质量真的很重要,这里有一个解决方法:您可以直接在TextDocument上使用QPainter。这需要更多的工作和调整,但质量不会丢失。

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);


    // Create a chart
    QLineSeries *series = new QLineSeries();
    series->append(0,0);
    series->append(1,1);
    QChart *chart = new QChart();
    chart->addSeries(series);
    chart->createDefaultAxes();
    chart->axisX()->setTitleText(QString("x [m]"));
    chart->axisY()->setTitleText(QString("y [m]"));
    chart->setTitle("Simple chart example");
    chart->resize(500,500);

    QChartView *chartView = new QChartView(chart);
    chartView->setRenderHint(QPainter::TextAntialiasing);
    chartView->show();

    // Set up pdf writer
    QString filename = "myfile.pdf";
    QPdfWriter writer(filename);
    writer.setPageSize(QPagedPaintDevice::A4);

    // Create the document
    QTextDocument doc;

    QPainter painter(&writer);
    QFont font = painter.font();
    font.setPixelSize(200);
    painter.setFont(font);

    painter.drawText(QPoint(700,100),"Some text");
    chartView->render(&painter);

    doc.drawContents(&painter);
    return a.exec();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接