FileItem::FileItem(const QString & name, const QString & path ) : QTreeWidgetItem( QStringList( name ), TypeFileItem ), m_path( path ) { determineFileType(); initPixmaps(); }
void MainWindow::saveImage(const QString &fileName) { canvas->unselectAll(); FileType fileType = determineFileType(fileName); QSize imageDimension(canvas->sceneRect().width(), canvas->sceneRect().height()); QPainter *painter = new QPainter(); QPrinter *printer = new QPrinter(); printer->setPaperSize(5.0*imageDimension, QPrinter::Point); printer->setFullPage(true); printer->setOutputFileName(fileName); // The vector graphics formats still seem to rasterize radial gradients, so I // use antialiasing to keep them looking pretty if(fileType == SVG){ QSvgGenerator *svgGen = new QSvgGenerator(); svgGen->setSize(5.0*imageDimension); svgGen->setFileName(fileName); painter->begin(svgGen); painter->setRenderHint(QPainter::SmoothPixmapTransform, true); painter->setRenderHint(QPainter::Antialiasing, true); painter->setRenderHint(QPainter::HighQualityAntialiasing, true); canvas->render(painter); painter->end(); delete svgGen; }else if(fileType == PNG || fileType == TIFF){ QImage *image = new QImage(5.0*imageDimension, QImage::Format_ARGB32); painter->begin(image); painter->setRenderHint(QPainter::SmoothPixmapTransform, true); painter->setRenderHint(QPainter::Antialiasing, true); painter->setRenderHint(QPainter::HighQualityAntialiasing, true); canvas->render(painter); painter->end(); image->save(fileName); delete image; }else if(fileType == PDF){ printer->setOutputFormat(QPrinter::PdfFormat); painter->begin(printer); painter->setRenderHint(QPainter::SmoothPixmapTransform, true); painter->setRenderHint(QPainter::Antialiasing, true); painter->setRenderHint(QPainter::HighQualityAntialiasing, true); canvas->render(painter); painter->end(); }else if(fileType == PostScript){ printer->setOutputFormat(QPrinter::PostScriptFormat); painter->begin(printer); painter->setRenderHint(QPainter::SmoothPixmapTransform, true); painter->setRenderHint(QPainter::Antialiasing, true); painter->setRenderHint(QPainter::HighQualityAntialiasing, true); canvas->render(painter); painter->end(); }else{ QString message("Unsupported file type:\n\n"); message += fileName; message += "\n\nSupported extensions are\n.pdf, .svg, .ps, .eps, .png, .tiff, .tif, .chmvp"; error(message, __FILE__, __LINE__); return; } delete painter; delete printer; }