i want generate pdf report containing text , qchart. use qtextdocument , add chart image, use qpdfwriter export 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 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 chart 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 pdf writer qstring filename = "myfile.pdf"; qpdfwriter writer(filename); writer.setpagesize(qpagedpaintdevice::a4); // create document qtextdocument doc; qtextcursor cursor(&doc); cursor.inserttext(qstring("some text\n")); cursor.insertimage(img); // print document doc.print(&writer); return a.exec(); }
although works, avoid converting chart image because messes image quality. there way it?
here workaround, if image quality matters : can use qpainter directly on textdocument. requires more work , adjustement, quality not lost.
int main(int argc, char *argv[]) { qapplication a(argc, argv); // create 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 pdf writer qstring filename = "myfile.pdf"; qpdfwriter writer(filename); writer.setpagesize(qpagedpaintdevice::a4); // create 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(); }