Home · All Classes · Main Classes · Grouped Classes · Modules · Functions

svgview.cpp Example File
painting/svgviewer/svgview.cpp

    /****************************************************************************
    **
    ** Copyright (C) 2005-2006 Trolltech AS. All rights reserved.
    **
    ** This file is part of the documentation of the Qt Toolkit.
    **
    ** This file may be used under the terms of the GNU General Public
    ** License version 2.0 as published by the Free Software Foundation
    ** and appearing in the file LICENSE.GPL included in the packaging of
    ** this file.  Please review the following information to ensure GNU
    ** General Public Licensing requirements will be met:
    ** http://www.trolltech.com/products/qt/opensource.html
    **
    ** If you are unsure which license is appropriate for your use, please
    ** review the following information:
    ** http://www.trolltech.com/products/qt/licensing.html or contact the
    ** sales department at sales@trolltech.com.
    **
    ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
    ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
    **
    ****************************************************************************/
    #include "svgview.h"

    #include <QSvgRenderer>

    #include <QApplication>
    #include <QPainter>
    #include <QImage>
    #include <QWheelEvent>
    #include <QtDebug>

    SvgRasterView::SvgRasterView(const QString &file, QWidget *parent)
        : QWidget(parent)
    {
        doc = new QSvgRenderer(file, this);
        connect(doc, SIGNAL(repaintNeeded()),
                this, SLOT(poluteImage()));
    }

    void SvgRasterView::paintEvent(QPaintEvent *)
    {
        if (buffer.size() != size() ||
            m_dirty) {
            buffer = QImage(size(), QImage::Format_ARGB32_Premultiplied);
            QPainter p(&buffer);
            p.setViewport(0, 0, width(), height());
            p.eraseRect(0, 0, width(), height());
            doc->render(&p);
        }
        QPainter pt(this);
        pt.drawImage(0, 0, buffer);
    }

    QSize SvgRasterView::sizeHint() const
    {
        if (doc)
            return doc->defaultSize();
        return QWidget::sizeHint();
    }

    void SvgRasterView::poluteImage()
    {
        m_dirty = true;
        update();
    }

    void SvgRasterView::wheelEvent(QWheelEvent *e)
    {
        const double diff = 0.1;
        QSize size = doc->defaultSize();
        int width  = size.width();
        int height = size.height();
        if (e->delta() > 0) {
            width = int(this->width()+this->width()*diff);
            height = int(this->height()+this->height()*diff);
        } else {
            width  = int(this->width()-this->width()*diff);
            height = int(this->height()-this->height()*diff);
        }

        resize(width, height);
    }

    SvgNativeView::SvgNativeView(const QString &file, QWidget *parent)
        : QWidget(parent)
    {
        doc = new QSvgRenderer(file, this);
        connect(doc, SIGNAL(repaintNeeded()),
                this, SLOT(update()));
    }

    void SvgNativeView::paintEvent(QPaintEvent *)
    {
        QPainter p(this);
        p.setViewport(0, 0, width(), height());
        doc->render(&p);
    }

    QSize SvgNativeView::sizeHint() const
    {
        if (doc)
            return doc->defaultSize();
        return QWidget::sizeHint();
    }

    void SvgNativeView::wheelEvent(QWheelEvent *e)
    {
        const double diff = 0.1;
        QSize size = doc->defaultSize();
        int width  = size.width();
        int height = size.height();
        if (e->delta() > 0) {
            width = int(this->width()+this->width()*diff);
            height = int(this->height()+this->height()*diff);
        } else {
            width  = int(this->width()-this->width()*diff);
            height = int(this->height()-this->height()*diff);
        }
        resize(width, height);
    }

    #ifndef QT_NO_OPENGL
    SvgGLView::SvgGLView(const QString &file, QWidget *parent)
        : QGLWidget(QGLFormat(QGL::SampleBuffers), parent)
    {
        doc = new QSvgRenderer(file, this);
        connect(doc, SIGNAL(repaintNeeded()),
                this, SLOT(update()));
    }

    void SvgGLView::paintEvent(QPaintEvent *)
    {
        QPainter p(this);
        doc->render(&p);
    }

    QSize SvgGLView::sizeHint() const
    {
        if (doc)
            return doc->defaultSize();
        return QGLWidget::sizeHint();
    }

    void SvgGLView::wheelEvent(QWheelEvent *e)
    {
        const double diff = 0.1;
        QSize size = doc->defaultSize();
        int width  = size.width();
        int height = size.height();
        if (e->delta() > 0) {
            width = int(this->width()+this->width()*diff);
            height = int(this->height()+this->height()*diff);
        } else {
            width  = int(this->width()-this->width()*diff);
            height = int(this->height()-this->height()*diff);
        }
        resize(width, height);
    }
    #endif


Copyright © 2006 Trolltech Trademarks
Qt 4.1.3