diff options
author | Friedemann Kleint <Friedemann.Kleint@theqtcompany.com> | 2016-03-11 10:00:33 +0100 |
---|---|---|
committer | Friedemann Kleint <Friedemann.Kleint@theqtcompany.com> | 2016-03-11 17:06:54 +0000 |
commit | 99303e92ae9cf461f99b8eff8b37b42f758118b6 (patch) | |
tree | 7dd56787ed2e9ed711b599913bcb66e91e14b631 /examples/svg/svgviewer/svgview.cpp | |
parent | 86b82a0eea6c26fba34a9d2049935a18a088f3e7 (diff) |
Polish the SVG viewer example.
- Use Qt 5 connection syntax, demonstrating lambdas.
- Use QCommandLineParser.
- Improve error handling.
- Use Mime API of QFileDialog, point to pictures location initially.
- Prevent the application from shrinking when loading small images.
- Minor polishing, status messages on loading, About Qt dialog.
Change-Id: I76f14001c9ab12cbfaaacc2ca4828b404e4b13b2
Reviewed-by: aavit <eirik.aavitsland@theqtcompany.com>
Diffstat (limited to 'examples/svg/svgviewer/svgview.cpp')
-rw-r--r-- | examples/svg/svgviewer/svgview.cpp | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/examples/svg/svgviewer/svgview.cpp b/examples/svg/svgviewer/svgview.cpp index 5283bf1..dd9de1a 100644 --- a/examples/svg/svgviewer/svgview.cpp +++ b/examples/svg/svgviewer/svgview.cpp @@ -39,7 +39,8 @@ ****************************************************************************/ #include "svgview.h" -#include <QFile> +#include <QSvgRenderer> + #include <QWheelEvent> #include <QMouseEvent> #include <QGraphicsRectItem> @@ -54,9 +55,9 @@ SvgView::SvgView(QWidget *parent) : QGraphicsView(parent) , m_renderer(Native) - , m_svgItem(0) - , m_backgroundItem(0) - , m_outlineItem(0) + , m_svgItem(nullptr) + , m_backgroundItem(nullptr) + , m_outlineItem(nullptr) { setScene(new QGraphicsScene(this)); setTransformationAnchor(AnchorUnderMouse); @@ -83,20 +84,26 @@ void SvgView::drawBackground(QPainter *p, const QRectF &) p->restore(); } -void SvgView::openFile(const QFile &file) +QSize SvgView::svgSize() const { - if (!file.exists()) - return; + return m_svgItem ? m_svgItem->boundingRect().size().toSize() : QSize(); +} +bool SvgView::openFile(const QString &fileName) +{ QGraphicsScene *s = scene(); - bool drawBackground = (m_backgroundItem ? m_backgroundItem->isVisible() : false); - bool drawOutline = (m_outlineItem ? m_outlineItem->isVisible() : true); + const bool drawBackground = (m_backgroundItem ? m_backgroundItem->isVisible() : false); + const bool drawOutline = (m_outlineItem ? m_outlineItem->isVisible() : true); + + QScopedPointer<QGraphicsSvgItem> svgItem(new QGraphicsSvgItem(fileName)); + if (!svgItem->renderer()->isValid()) + return false; s->clear(); resetTransform(); - m_svgItem = new QGraphicsSvgItem(file.fileName()); + m_svgItem = svgItem.take(); m_svgItem->setFlags(QGraphicsItem::ItemClipsToShape); m_svgItem->setCacheMode(QGraphicsItem::NoCache); m_svgItem->setZValue(0); @@ -120,6 +127,7 @@ void SvgView::openFile(const QFile &file) s->addItem(m_outlineItem); s->setSceneRect(m_outlineItem->boundingRect().adjusted(-10, -10, 10, 10)); + return true; } void SvgView::setRenderer(RendererType type) |