mainwindow.cpp Example File | Qt SVG 5.6

Qt 5.6 | Qt SVG | SVG Viewer Example | mainwindow.cpp Example File

Qt 5.6.2 Reference Documentation

# mainwindow.cpp Example File

svgviewer/mainwindow.cpp

      /****************************************************************************
      **
      ** Copyright (C) 2015 The Qt Company Ltd.
      ** Contact: http://www.qt.io/licensing/
      **
      ** This file is part of the examples of the Qt Toolkit.
      **
      ** $QT_BEGIN_LICENSE:BSD$
      ** You may use this file under the terms of the BSD license as follows:
      **
      ** "Redistribution and use in source and binary forms, with or without
      ** modification, are permitted provided that the following conditions are
      ** met:
      **   * Redistributions of source code must retain the above copyright
      **     notice, this list of conditions and the following disclaimer.
      **   * Redistributions in binary form must reproduce the above copyright
      **     notice, this list of conditions and the following disclaimer in
      **     the documentation and/or other materials provided with the
      **     distribution.
      **   * Neither the name of The Qt Company Ltd nor the names of its
      **     contributors may be used to endorse or promote products derived
      **     from this software without specific prior written permission.
      **
      **
      ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
      ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
      ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
      ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
      ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
      ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
      ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
      ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
      ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
      ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
      ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
      **
      ** $QT_END_LICENSE$
      **
      ****************************************************************************/

      #include "mainwindow.h"

      #include <QtWidgets>

      #include "svgview.h"

      MainWindow::MainWindow()
          : QMainWindow()
          , m_view(new SvgView)
      {
          QMenu *fileMenu = new QMenu(tr("&File"), this);
          QAction *openAction = fileMenu->addAction(tr("&Open..."));
          openAction->setShortcut(QKeySequence(tr("Ctrl+O")));
          QAction *quitAction = fileMenu->addAction(tr("E&xit"));
          quitAction->setShortcuts(QKeySequence::Quit);

          menuBar()->addMenu(fileMenu);

          QMenu *viewMenu = new QMenu(tr("&View"), this);
          m_backgroundAction = viewMenu->addAction(tr("&Background"));
          m_backgroundAction->setEnabled(false);
          m_backgroundAction->setCheckable(true);
          m_backgroundAction->setChecked(false);
          connect(m_backgroundAction, SIGNAL(toggled(bool)), m_view, SLOT(setViewBackground(bool)));

          m_outlineAction = viewMenu->addAction(tr("&Outline"));
          m_outlineAction->setEnabled(false);
          m_outlineAction->setCheckable(true);
          m_outlineAction->setChecked(true);
          connect(m_outlineAction, SIGNAL(toggled(bool)), m_view, SLOT(setViewOutline(bool)));

          menuBar()->addMenu(viewMenu);

          QMenu *rendererMenu = new QMenu(tr("&Renderer"), this);
          m_nativeAction = rendererMenu->addAction(tr("&Native"));
          m_nativeAction->setCheckable(true);
          m_nativeAction->setChecked(true);
      #ifndef QT_NO_OPENGL
          m_glAction = rendererMenu->addAction(tr("&OpenGL"));
          m_glAction->setCheckable(true);
      #endif
          m_imageAction = rendererMenu->addAction(tr("&Image"));
          m_imageAction->setCheckable(true);

      #ifndef QT_NO_OPENGL
          rendererMenu->addSeparator();
          m_highQualityAntialiasingAction = rendererMenu->addAction(tr("&High Quality Antialiasing"));
          m_highQualityAntialiasingAction->setEnabled(false);
          m_highQualityAntialiasingAction->setCheckable(true);
          m_highQualityAntialiasingAction->setChecked(false);
          connect(m_highQualityAntialiasingAction, SIGNAL(toggled(bool)), m_view, SLOT(setHighQualityAntialiasing(bool)));
      #endif

          QActionGroup *rendererGroup = new QActionGroup(this);
          rendererGroup->addAction(m_nativeAction);
      #ifndef QT_NO_OPENGL
          rendererGroup->addAction(m_glAction);
      #endif
          rendererGroup->addAction(m_imageAction);

          menuBar()->addMenu(rendererMenu);

          connect(openAction, SIGNAL(triggered()), this, SLOT(openFile()));
          connect(quitAction, SIGNAL(triggered()), qApp, SLOT(quit()));
          connect(rendererGroup, SIGNAL(triggered(QAction*)),
                  this, SLOT(setRenderer(QAction*)));

          setCentralWidget(m_view);
          setWindowTitle(tr("SVG Viewer"));
      }

      void MainWindow::openFile(const QString &path)
      {
          QString fileName;
          if (path.isNull())
              fileName = QFileDialog::getOpenFileName(this, tr("Open SVG File"),
                      m_currentPath, "SVG files (*.svg *.svgz *.svg.gz)");
          else
              fileName = path;

          if (!fileName.isEmpty()) {
              QFile file(fileName);
              if (!file.exists()) {
                  QMessageBox::critical(this, tr("Open SVG File"),
                                 QString("Could not open file '%1'.").arg(fileName));

                  m_outlineAction->setEnabled(false);
                  m_backgroundAction->setEnabled(false);
                  return;
              }

              m_view->openFile(file);

              if (!fileName.startsWith(":/")) {
                  m_currentPath = fileName;
                  setWindowTitle(tr("%1 - SVGViewer").arg(m_currentPath));
              }

              m_outlineAction->setEnabled(true);
              m_backgroundAction->setEnabled(true);

              resize(m_view->sizeHint() + QSize(80, 80 + menuBar()->height()));
          }
      }

      void MainWindow::setRenderer(QAction *action)
      {
      #ifndef QT_NO_OPENGL
          m_highQualityAntialiasingAction->setEnabled(false);
      #endif

          if (action == m_nativeAction)
              m_view->setRenderer(SvgView::Native);
      #ifndef QT_NO_OPENGL
          else if (action == m_glAction) {
              m_highQualityAntialiasingAction->setEnabled(true);
              m_view->setRenderer(SvgView::OpenGL);
          }
      #endif
          else if (action == m_imageAction) {
              m_view->setRenderer(SvgView::Image);
          }
      }