QtMobility 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 <QtDeclarative/QDeclarativeComponent>
 #include <QtDeclarative/QDeclarativeEngine>
 #include <QtDeclarative/QDeclarativeContext>
 #include <QtGui/QApplication>

 #include <qplatformdefs.h> // MEEGO_EDITION_HARMATTAN

 #ifdef HARMATTAN_BOOSTER
 #include <MDeclarativeCache>
 #endif

 #if defined(QMLJSDEBUGGER) && QT_VERSION < 0x040800

 #include <qt_private/qdeclarativedebughelper_p.h>

 #if !defined(NO_JSDEBUGGER)
 #include <jsdebuggeragent.h>
 #endif
 #if !defined(NO_QMLOBSERVER)
 #include <qdeclarativeviewobserver.h>
 #endif

 // Enable debugging before any QDeclarativeEngine is created
 struct QmlJsDebuggingEnabler
 {
     QmlJsDebuggingEnabler()
     {
         QDeclarativeDebugHelper::enableDebugging();
     }
 };

 // Execute code in constructor before first QDeclarativeEngine is instantiated
 static QmlJsDebuggingEnabler enableDebuggingHelper;

 #endif // QMLJSDEBUGGER

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

     QString mainQmlFile;
     QDeclarativeView *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::fromAscii("%1/../%2").arg(applicationDirPath, path);

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

 QmlApplicationViewer::QmlApplicationViewer(QWidget *parent)
     : QDeclarativeView(parent)
     , d(new QmlApplicationViewerPrivate(this))
 {
     connect(engine(), SIGNAL(quit()), SLOT(close()));
     setResizeMode(QDeclarativeView::SizeRootObjectToView);
     // Qt versions prior to 4.8.0 don't have QML/JS debugging services built in
 #if defined(QMLJSDEBUGGER) && QT_VERSION < 0x040800
 #if !defined(NO_JSDEBUGGER)
     new QmlJSDebugger::JSDebuggerAgent(d->view->engine());
 #endif
 #if !defined(NO_QMLOBSERVER)
     new QmlJSDebugger::QDeclarativeViewObserver(d->view, d->view);
 #endif
 #endif
 }

 QmlApplicationViewer::QmlApplicationViewer(QDeclarativeView *view, QWidget *parent)
     : QDeclarativeView(parent)
     , d(new QmlApplicationViewerPrivate(view))
 {
     connect(view->engine(), SIGNAL(quit()), view, SLOT(close()));
     view->setResizeMode(QDeclarativeView::SizeRootObjectToView);
     // Qt versions prior to 4.8.0 don't have QML/JS debugging services built in
 #if defined(QMLJSDEBUGGER) && QT_VERSION < 0x040800
 #if !defined(NO_JSDEBUGGER)
     new QmlJSDebugger::JSDebuggerAgent(d->view->engine());
 #endif
 #if !defined(NO_QMLOBSERVER)
     new QmlJSDebugger::QDeclarativeViewObserver(d->view, d->view);
 #endif
 #endif
 }

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

 QmlApplicationViewer *QmlApplicationViewer::create()
 {
 #ifdef HARMATTAN_BOOSTER
     return new QmlApplicationViewer(MDeclarativeCache::qDeclarativeView(), 0);
 #else
     return new QmlApplicationViewer();
 #endif
 }

 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::setOrientation(ScreenOrientation orientation)
 {
 #if defined(Q_OS_SYMBIAN)
     // If the version of Qt on the device is < 4.7.2, that attribute won't work
     if (orientation != ScreenOrientationAuto) {
         const QStringList v = QString::fromAscii(qVersion()).split(QLatin1Char('.'));
         if (v.count() == 3 && (v.at(0).toInt() << 16 | v.at(1).toInt() << 8 | v.at(2).toInt()) < 0x040702) {
             qWarning("Screen orientation locking only supported with Qt 4.7.2 and above");
             return;
         }
     }
 #endif // Q_OS_SYMBIAN

     Qt::WidgetAttribute attribute;
     switch (orientation) {
 #if QT_VERSION < 0x040702
     // Qt < 4.7.2 does not yet have the Qt::WA_*Orientation attributes
     case ScreenOrientationLockPortrait:
         attribute = static_cast<Qt::WidgetAttribute>(128);
         break;
     case ScreenOrientationLockLandscape:
         attribute = static_cast<Qt::WidgetAttribute>(129);
         break;
     default:
     case ScreenOrientationAuto:
         attribute = static_cast<Qt::WidgetAttribute>(130);
         break;
 #else // QT_VERSION < 0x040702
     case ScreenOrientationLockPortrait:
         attribute = Qt::WA_LockPortraitOrientation;
         break;
     case ScreenOrientationLockLandscape:
         attribute = Qt::WA_LockLandscapeOrientation;
         break;
     default:
     case ScreenOrientationAuto:
         attribute = Qt::WA_AutoOrientation;
         break;
 #endif // QT_VERSION < 0x040702
     };
     setAttribute(attribute, true);
 }

 void QmlApplicationViewer::showExpanded()
 {
 #if defined(Q_OS_SYMBIAN) || defined(MEEGO_EDITION_HARMATTAN) || defined(Q_WS_SIMULATOR)
     d->view->showFullScreen();
 #elif defined(Q_WS_MAEMO_5)
     d->view->showMaximized();
 #else
     d->view->show();
 #endif
 }

 QApplication *createApplication(int &argc, char **argv)
 {
 #ifdef HARMATTAN_BOOSTER
     return MDeclarativeCache::qApplication(argc, argv);
 #else
     return new QApplication(argc, argv);
 #endif
 }
X

Thank you for giving your feedback.

Make sure it is related to this specific page. For more general bugs and requests, please use the Qt Bug Tracker.