diff options
author | Friedemann Kleint <Friedemann.Kleint@theqtcompany.com> | 2016-03-14 14:25:23 +0100 |
---|---|---|
committer | Friedemann Kleint <Friedemann.Kleint@theqtcompany.com> | 2016-03-15 09:52:34 +0000 |
commit | 95e0d10ddd18b15ba12886d1ec3c5c9c3e06bd55 (patch) | |
tree | f3510ddc66b1870e9cfa2c7154c54a8b2bd6dd23 /examples/svg/svgviewer/mainwindow.cpp | |
parent | 99303e92ae9cf461f99b8eff8b37b42f758118b6 (diff) | |
download | qtsvg-95e0d10ddd18b15ba12886d1ec3c5c9c3e06bd55.tar.gz |
SVG viewer: Add export option.
Add an option to export an image giving a size. This can be
used for creating High DPI icons from SVG files among other things.
Task-number: QTBUG-49374
Change-Id: I0437889961bc6e646667c5165584002f7ab4d952
Reviewed-by: aavit <eirik.aavitsland@theqtcompany.com>
Diffstat (limited to 'examples/svg/svgviewer/mainwindow.cpp')
-rw-r--r-- | examples/svg/svgviewer/mainwindow.cpp | 63 |
1 files changed, 60 insertions, 3 deletions
diff --git a/examples/svg/svgviewer/mainwindow.cpp b/examples/svg/svgviewer/mainwindow.cpp index 4e94642..c63f223 100644 --- a/examples/svg/svgviewer/mainwindow.cpp +++ b/examples/svg/svgviewer/mainwindow.cpp @@ -39,18 +39,35 @@ ****************************************************************************/ #include "mainwindow.h" +#include "exportdialog.h" #include <QtWidgets> +#include <QSvgRenderer> #include "svgview.h" +static inline QString picturesLocation() +{ + return QStandardPaths::standardLocations(QStandardPaths::PicturesLocation).value(0, QDir::currentPath()); +} + MainWindow::MainWindow() : QMainWindow() , m_view(new SvgView) { + QToolBar *toolBar = new QToolBar(this); + addToolBar(Qt::TopToolBarArea, toolBar); + QMenu *fileMenu = menuBar()->addMenu(tr("&File")); - QAction *openAction = fileMenu->addAction(tr("&Open..."), this, &MainWindow::openFile); + const QIcon openIcon = QIcon::fromTheme("document-open", QIcon(":/qt-project.org/styles/commonstyle/images/standardbutton-open-32.png")); + QAction *openAction = fileMenu->addAction(openIcon, tr("&Open..."), this, &MainWindow::openFile); openAction->setShortcut(QKeySequence::Open); + toolBar->addAction(openAction); + const QIcon exportIcon = QIcon::fromTheme("document-save", QIcon(":/qt-project.org/styles/commonstyle/images/standardbutton-save-32.png")); + QAction *exportAction = fileMenu->addAction(exportIcon, tr("&Export..."), this, &MainWindow::exportImage); + exportAction->setToolTip(tr("Export Image")); + exportAction->setShortcut(Qt::CTRL + Qt::Key_E); + toolBar->addAction(exportAction); QAction *quitAction = fileMenu->addAction(tr("E&xit"), qApp, QCoreApplication::quit); quitAction->setShortcuts(QKeySequence::Quit); @@ -116,7 +133,7 @@ void MainWindow::openFile() fileDialog.setMimeTypeFilters(QStringList() << "image/svg+xml" << "image/svg+xml-compressed"); fileDialog.setWindowTitle(tr("Open SVG File")); if (m_currentPath.isEmpty()) - fileDialog.setDirectory(QStandardPaths::standardLocations(QStandardPaths::PicturesLocation).value(0, QDir::currentPath())); + fileDialog.setDirectory(picturesLocation()); while (fileDialog.exec() == QDialog::Accepted && !loadFile(fileDialog.selectedFiles().constFirst())) ; @@ -126,7 +143,7 @@ bool MainWindow::loadFile(const QString &fileName) { if (!QFileInfo::exists(fileName) || !m_view->openFile(fileName)) { QMessageBox::critical(this, tr("Open SVG File"), - QString("Could not open file '%1'.").arg(QDir::toNativeSeparators(fileName))); + tr("Could not open file '%1'.").arg(QDir::toNativeSeparators(fileName))); return false; } @@ -154,3 +171,43 @@ void MainWindow::setRenderer(int renderMode) m_highQualityAntialiasingAction->setEnabled(renderMode == SvgView::OpenGL); m_view->setRenderer(static_cast<SvgView::RendererType>(renderMode)); } + +void MainWindow::exportImage() +{ + ExportDialog exportDialog(this); + exportDialog.setExportSize(m_view->svgSize()); + QString fileName; + if (m_currentPath.isEmpty()) { + fileName = picturesLocation() + QLatin1String("/export.png"); + } else { + const QFileInfo fi(m_currentPath); + fileName = fi.absolutePath() + QLatin1Char('/') + fi.baseName() + QLatin1String(".png"); + } + exportDialog.setExportFileName(fileName); + + while (true) { + if (exportDialog.exec() != QDialog::Accepted) + break; + + const QSize imageSize = exportDialog.exportSize(); + QImage image(imageSize, QImage::Format_ARGB32); + image.fill(Qt::transparent); + QPainter painter; + painter.begin(&image); + m_view->renderer()->render(&painter, QRectF(QPointF(), QSizeF(imageSize))); + painter.end(); + + const QString fileName = exportDialog.exportFileName(); + if (image.save(fileName)) { + + const QString message = tr("Exported %1, %2x%3, %4 bytes") + .arg(QDir::toNativeSeparators(fileName)).arg(imageSize.width()).arg(imageSize.height()) + .arg(QFileInfo(fileName).size()); + statusBar()->showMessage(message); + break; + } else { + QMessageBox::critical(this, tr("Export Image"), + tr("Could not write file '%1'.").arg(QDir::toNativeSeparators(fileName))); + } + } +} |