qmlapplicationviewer.cpp Example File

multimedia/video/qmlvideofx/qmlapplicationviewer/qmlapplicationviewer.cpp
 /****************************************************************************
 **
 ** Copyright (C) 2016 The Qt Company Ltd.
 ** Contact: https://www.qt.io/licensing/
 **
 ** This file is part of the Qt Mobility Components.
 **
 ** $QT_BEGIN_LICENSE:BSD$
 ** 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 The Qt Company. For licensing terms
 ** and conditions see https://www.qt.io/terms-conditions. For further
 ** information use the contact form at https://www.qt.io/contact-us.
 **
 ** BSD License Usage
 ** Alternatively, 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 "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(), &QQmlEngine::quit, QCoreApplication::instance(), &QCoreApplication::quit);
     setResizeMode(QQuickView::SizeRootObjectToView);
 }

 QmlApplicationViewer::QmlApplicationViewer(QQuickView *view, QWindow *parent)
     : QQuickView(parent)
     , d(new QmlApplicationViewerPrivate(view))
 {
     connect(view->engine(), &QQmlEngine::quit, QCoreApplication::instance(), &QCoreApplication::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);
 }