- Qt 5.3
- Qt Multimedia
- QML Video Shader Effects Example
- qmlapplicationviewer.cpp Example File
- Qt 5.3.2 Reference Documentation

# qmlapplicationviewer.cpp Example File

video/qmlvideofx/qmlapplicationviewer/qmlapplicationviewer.cpp

    /****************************************************************************
    **
    ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
    ** Contact: http://www.qt-project.org/legal
    **
    ** This file is part of the Qt Mobility Components.
    **
    ** $QT_BEGIN_LICENSE:LGPL$
    ** Commercial License Usage
    ** Licensees holding valid commercial Qt licenses may use this file in
    ** accordance with the commercial license agreement provided with the
    ** Software or, alternatively, in accordance with the terms contained in
    ** a written agreement between you and Digia.  For licensing terms and
    ** conditions see http://qt.digia.com/licensing.  For further information
    ** use the contact form at http://qt.digia.com/contact-us.
    **
    ** GNU Lesser General Public License Usage
    ** Alternatively, this file may be used under the terms of the GNU Lesser
    ** General Public License version 2.1 as published by the Free Software
    ** Foundation and appearing in the file LICENSE.LGPL included in the
    ** packaging of this file.  Please review the following information to
    ** ensure the GNU Lesser General Public License version 2.1 requirements
    ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
    **
    ** In addition, as a special exception, Digia gives you certain additional
    ** rights.  These rights are described in the Digia Qt LGPL Exception
    ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
    **
    ** GNU General Public License Usage
    ** Alternatively, this file may be used under the terms of the GNU
    ** General Public License version 3.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 the GNU General Public License version 3.0 requirements will be
    ** met: http://www.gnu.org/copyleft/gpl.html.
    **
    **
    ** $QT_END_LICENSE$
    **
    ****************************************************************************/

    #include "qmlapplicationviewer.h"

    #include <QtCore/QDir>
    #include <QtCore/QFileInfo>
    #include <QtQml/QQmlComponent>
    #include <QtQml/QQmlEngine>
    #include <QtQml/QQmlContext>
    #include <QtGui/QGuiApplication>

    class QmlApplicationViewerPrivate
    {
        QmlApplicationViewerPrivate(QQuickView *view_) : view(view_) {}

        QString mainQmlFile;
        QQuickView *view;
        friend class QmlApplicationViewer;
        QString adjustPath(const QString &path);
    };

    QString QmlApplicationViewerPrivate::adjustPath(const QString &path)
    {
    #ifdef Q_OS_UNIX
    #ifdef Q_OS_MAC
        if (!QDir::isAbsolutePath(path))
            return QCoreApplication::applicationDirPath()
                    + QLatin1String("/../Resources/") + path;
    #else
        QString pathInInstallDir;
        const QString applicationDirPath = QCoreApplication::applicationDirPath();
        pathInInstallDir = QString::fromLatin1("%1/../%2").arg(applicationDirPath, path);

        if (QFileInfo(pathInInstallDir).exists())
            return pathInInstallDir;
    #endif
    #endif
        return path;
    }

    QmlApplicationViewer::QmlApplicationViewer(QWindow *parent)
        : QQuickView(parent)
        , d(new QmlApplicationViewerPrivate(this))
    {
        connect(engine(), SIGNAL(quit()), QCoreApplication::instance(), SLOT(quit()));
        setResizeMode(QQuickView::SizeRootObjectToView);
    }

    QmlApplicationViewer::QmlApplicationViewer(QQuickView *view, QWindow *parent)
        : QQuickView(parent)
        , d(new QmlApplicationViewerPrivate(view))
    {
        connect(view->engine(), SIGNAL(quit()), QCoreApplication::instance(), SLOT(quit()));
        view->setResizeMode(QQuickView::SizeRootObjectToView);
    }

    QmlApplicationViewer::~QmlApplicationViewer()
    {
        delete d;
    }

    QmlApplicationViewer *QmlApplicationViewer::create()
    {
        return new QmlApplicationViewer();
    }

    void QmlApplicationViewer::setMainQmlFile(const QString &file)
    {
        d->mainQmlFile = d->adjustPath(file);
        d->view->setSource(QUrl::fromLocalFile(d->mainQmlFile));
    }

    void QmlApplicationViewer::addImportPath(const QString &path)
    {
        d->view->engine()->addImportPath(d->adjustPath(path));
    }

    void QmlApplicationViewer::showExpanded()
    {
    #if defined(Q_WS_SIMULATOR)
        d->view->showFullScreen();
    #else
        d->view->show();
    #endif
    }

    QGuiApplication *createApplication(int &argc, char **argv)
    {
        return new QGuiApplication(argc, argv);
    }