moijhd
22nd July 2013, 16:18
Hi,
I am trying to render a QwtPlotSpectrogram into a PDF file using a QwtPlotRenderer.
Here some code that does not get the result I expected :
int main()
{
QwtPlot *plot;
plot = new QwtPlot();
plot->setTitle("Plot");
plot->setAxisScale(QwtPlot::xBottom, 0, 10);
plot->setAxisScale(QwtPlot::yLeft, 0, 10);
plot->enableAxis(QwtPlot::yRight);
plot->setAxisScale(QwtPlot::yRight, 0, 100*100);
plot->show();
QVector<double> xData;
QVector<double> zData;
for(int i = 0; i < 100; i++)
{
zData.push_back(i*i);
xData.push_back(i);
}
QwtMatrixRasterData *matrix;
matrix = new QwtMatrixRasterData();
matrix->setValueMatrix(zData, 10);
matrix->setInterval(
Qt::XAxis,
QwtInterval(0, 10)
);
matrix->setInterval(
Qt::YAxis,
QwtInterval(0, 10)
);
matrix->setInterval(
Qt::ZAxis,
QwtInterval(0, 100*100)
);
QwtPlotSpectrogram *spectrogram;
spectrogram = new QwtPlotSpectrogram();
spectrogram->setData(
matrix
);
spectrogram->attach(plot);
QwtPlotCurve *curve;
curve = new QwtPlotCurve();
curve->setSamples(xData, zData);
curve->attach(plot);
QwtPlotRenderer *plotRenderer;
plotRenderer = new QwtPlotRenderer();
plotRenderer->setDiscardFlag(QwtPlotRenderer::DiscardBackground) ;
plotRenderer->setDiscardFlag(QwtPlotRenderer::DiscardCanvasBackg round);
plotRenderer->setDiscardFlag(QwtPlotRenderer::DiscardCanvasFrame );
plot->replot();
QPrinter printer;
printer.setOutputFormat(QPrinter::PdfFormat);
printer.setOutputFileName("test01.pdf");
printer.setResolution(QPrinter::HighResolution);
printer.setColorMode(QPrinter::Color);
printer.setDuplex(QPrinter::DuplexAuto);
printer.setFullPage(true);
printer.setOrientation(QPrinter::Landscape);
printer.setPageMargins(0, 0, 0, 0, QPrinter::Millimeter);
printer.setPageOrder(QPrinter::FirstPageFirst);
QPainter *painter;
painter = new QPainter();
painter->begin(&printer);
plotRenderer->render(plot, painter, painter->viewport());
painter->end();
return 0;
}
Please see attachments to understand.
Thanks !
Added after 16 minutes:
printer.setResolution(QPrinter::HighResolution);
was the problem.
I removed it. And I guess I should prefer QPrinter::setResolution instead, if I want to increase the quality of the document.
I am trying to render a QwtPlotSpectrogram into a PDF file using a QwtPlotRenderer.
Here some code that does not get the result I expected :
int main()
{
QwtPlot *plot;
plot = new QwtPlot();
plot->setTitle("Plot");
plot->setAxisScale(QwtPlot::xBottom, 0, 10);
plot->setAxisScale(QwtPlot::yLeft, 0, 10);
plot->enableAxis(QwtPlot::yRight);
plot->setAxisScale(QwtPlot::yRight, 0, 100*100);
plot->show();
QVector<double> xData;
QVector<double> zData;
for(int i = 0; i < 100; i++)
{
zData.push_back(i*i);
xData.push_back(i);
}
QwtMatrixRasterData *matrix;
matrix = new QwtMatrixRasterData();
matrix->setValueMatrix(zData, 10);
matrix->setInterval(
Qt::XAxis,
QwtInterval(0, 10)
);
matrix->setInterval(
Qt::YAxis,
QwtInterval(0, 10)
);
matrix->setInterval(
Qt::ZAxis,
QwtInterval(0, 100*100)
);
QwtPlotSpectrogram *spectrogram;
spectrogram = new QwtPlotSpectrogram();
spectrogram->setData(
matrix
);
spectrogram->attach(plot);
QwtPlotCurve *curve;
curve = new QwtPlotCurve();
curve->setSamples(xData, zData);
curve->attach(plot);
QwtPlotRenderer *plotRenderer;
plotRenderer = new QwtPlotRenderer();
plotRenderer->setDiscardFlag(QwtPlotRenderer::DiscardBackground) ;
plotRenderer->setDiscardFlag(QwtPlotRenderer::DiscardCanvasBackg round);
plotRenderer->setDiscardFlag(QwtPlotRenderer::DiscardCanvasFrame );
plot->replot();
QPrinter printer;
printer.setOutputFormat(QPrinter::PdfFormat);
printer.setOutputFileName("test01.pdf");
printer.setResolution(QPrinter::HighResolution);
printer.setColorMode(QPrinter::Color);
printer.setDuplex(QPrinter::DuplexAuto);
printer.setFullPage(true);
printer.setOrientation(QPrinter::Landscape);
printer.setPageMargins(0, 0, 0, 0, QPrinter::Millimeter);
printer.setPageOrder(QPrinter::FirstPageFirst);
QPainter *painter;
painter = new QPainter();
painter->begin(&printer);
plotRenderer->render(plot, painter, painter->viewport());
painter->end();
return 0;
}
Please see attachments to understand.
Thanks !
Added after 16 minutes:
printer.setResolution(QPrinter::HighResolution);
was the problem.
I removed it. And I guess I should prefer QPrinter::setResolution instead, if I want to increase the quality of the document.