2016-06-06 4 views
3

Ich möchte einen PDF-Bericht erstellen, der Text und ein QChart enthält. Ich verwende derzeit das QTextDocument und füge das Diagramm als Bild hinzu, dann benutze ich den QPdfWriter, um nach PDF zu exportieren.QChart in einem QTextDocument

#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(); 
} 

Obwohl es funktioniert, möchte ich vermeiden, das Diagramm in ein Bild zu konvertieren, weil es die Bildqualität vermasselt. Gibt es einen Weg, es zu tun?

Antwort

0

Hier ist ein Workaround, wenn die Bildqualität wirklich zählt: Sie können QPainter direkt auf dem TextDocument verwenden. Es erfordert mehr Arbeit und Anpassung, aber die Qualität ist nicht verloren.

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(); 
} 
Verwandte Themen