2013-06-11 14:23:35 +02:00
|
|
|
/****************************************************************************
|
|
|
|
|
**
|
2015-01-14 18:07:15 +01:00
|
|
|
** Copyright (C) 2015 The Qt Company Ltd.
|
|
|
|
|
** Contact: http://www.qt.io/licensing
|
2013-06-11 14:23:35 +02:00
|
|
|
**
|
|
|
|
|
** This file is part of Qt Creator
|
|
|
|
|
**
|
|
|
|
|
**
|
|
|
|
|
** GNU Free Documentation License
|
|
|
|
|
**
|
|
|
|
|
** Alternatively, this file may be used under the terms of the GNU Free
|
|
|
|
|
** Documentation License version 1.3 as published by the Free Software
|
|
|
|
|
** Foundation and appearing in the file included in the packaging of this
|
|
|
|
|
** file.
|
|
|
|
|
**
|
|
|
|
|
**
|
|
|
|
|
****************************************************************************/
|
|
|
|
|
|
|
|
|
|
// **********************************************************************
|
|
|
|
|
// NOTE: the sections are not ordered by their logical order to avoid
|
|
|
|
|
// reshuffling the file each time the index order changes (i.e., often).
|
|
|
|
|
// Run the fixnavi.pl script to adjust the links to the index order.
|
|
|
|
|
// **********************************************************************
|
|
|
|
|
|
|
|
|
|
/*!
|
2014-03-17 12:18:12 +01:00
|
|
|
\contentspage {Qt Creator Manual}
|
2013-06-11 14:23:35 +02:00
|
|
|
\previouspage creator-writing-program.html
|
2015-06-29 14:49:40 +02:00
|
|
|
\example accelbubble
|
2015-06-26 14:40:35 +02:00
|
|
|
\nextpage {Using Qt Quick UI Forms}
|
2013-06-11 14:23:35 +02:00
|
|
|
|
2014-03-27 17:32:48 +01:00
|
|
|
\title Creating a Mobile Application
|
2013-06-11 14:23:35 +02:00
|
|
|
|
2014-03-27 17:32:48 +01:00
|
|
|
This tutorial describes developing Qt Quick applications for Android and iOS
|
|
|
|
|
devices using Qt Quick Controls.
|
|
|
|
|
We use \QC to implement a Qt Quick application
|
2013-06-11 14:23:35 +02:00
|
|
|
that accelerates an SVG (Scalable Vector Graphics) image based on the
|
|
|
|
|
changing accelerometer values.
|
|
|
|
|
|
|
|
|
|
\image creator_android_tutorial_ex_app.png
|
|
|
|
|
|
2014-01-17 10:19:58 +01:00
|
|
|
\section1 Setting up the Development Environment
|
|
|
|
|
|
2014-03-27 17:32:48 +01:00
|
|
|
To be able to build and run the application on a mobile device, you must
|
|
|
|
|
set up the development environment for the device platform and configure a
|
|
|
|
|
connection between \QC and the mobile device.
|
|
|
|
|
|
|
|
|
|
To develop for Android devices, you must download and install
|
2014-01-17 10:19:58 +01:00
|
|
|
the latest Android NDK and SDK, and update the SDK to get the API and tools
|
2014-03-27 17:32:48 +01:00
|
|
|
needed for development. In addition, you must install the
|
2014-01-17 10:19:58 +01:00
|
|
|
Java SE Development Kit (JDK) and Apache Ant. After you have installed all
|
|
|
|
|
these tools, you must specify the paths to them in \QC.
|
|
|
|
|
For detailed instructions, see \l{Qt for Android} and
|
|
|
|
|
\l{Connecting Android Devices}.
|
|
|
|
|
|
2014-03-27 17:32:48 +01:00
|
|
|
To develop for iOS devices, you must install Xcode and use it to configure
|
|
|
|
|
a device. For this, you need an Apple developer account and iOS Developer
|
|
|
|
|
Program certificate that you receive from Apple. For more information, see
|
|
|
|
|
\l{Connecting iOS Devices}.
|
|
|
|
|
|
2013-06-11 14:23:35 +02:00
|
|
|
\section1 Creating the Project
|
|
|
|
|
|
|
|
|
|
\list 1
|
|
|
|
|
|
2015-06-29 14:49:40 +02:00
|
|
|
\li Select \uicontrol File > \uicontrol {New File or Project} >
|
|
|
|
|
\uicontrol Application > \uicontrol {Qt Quick Controls Application}
|
|
|
|
|
> \uicontrol Choose.
|
2013-06-11 14:23:35 +02:00
|
|
|
|
2015-06-29 14:49:40 +02:00
|
|
|
\li In the \uicontrol Name field, type \e {accelbubble}.
|
2013-06-11 14:23:35 +02:00
|
|
|
|
2015-06-29 14:49:40 +02:00
|
|
|
\li In the \uicontrol {Create in} field, enter the path for the project
|
|
|
|
|
files, and then click \uicontrol Next (or \uicontrol Continue on
|
|
|
|
|
OS X).
|
|
|
|
|
|
|
|
|
|
\li In the \uicontrol {Minimal required Qt version} field, select the Qt
|
|
|
|
|
version to develop with.
|
2013-06-11 14:23:35 +02:00
|
|
|
|
2015-06-29 14:49:40 +02:00
|
|
|
\note This page determines the set of files that the wizard
|
|
|
|
|
generates and their contents. The instructions in this tutorial
|
|
|
|
|
might not apply if you select the \uicontrol {With .ui.qml file}
|
|
|
|
|
check box.
|
2013-11-05 12:55:47 +01:00
|
|
|
|
2014-03-27 17:32:48 +01:00
|
|
|
\li Select \l{glossary-buildandrun-kit}{kits} for Android ARM and iPhone
|
2014-12-11 15:43:19 +01:00
|
|
|
OS, and click \uicontrol{Next}.
|
2013-06-11 14:23:35 +02:00
|
|
|
|
2014-12-11 15:43:19 +01:00
|
|
|
\note Kits are listed if they have been specified in \uicontrol Tools >
|
|
|
|
|
\uicontrol Options > \uicontrol {Build & Run} > \uicontrol Kits (on Windows and Linux)
|
|
|
|
|
or in \uicontrol {Qt Creator} > \uicontrol Preferences \uicontrol {Build & Run} >
|
|
|
|
|
\uicontrol Kits (on OS X).
|
2013-06-11 14:23:35 +02:00
|
|
|
|
2014-12-11 15:43:19 +01:00
|
|
|
\li Select \uicontrol Next in the following dialogs to use the default
|
2013-06-11 14:23:35 +02:00
|
|
|
settings.
|
|
|
|
|
|
2014-12-11 15:43:19 +01:00
|
|
|
\li Review the project settings, and click \uicontrol{Finish} (or \uicontrol Done on
|
2014-05-02 12:44:45 +02:00
|
|
|
OS X).
|
2013-10-28 11:10:55 +01:00
|
|
|
|
2013-06-11 14:23:35 +02:00
|
|
|
\endlist
|
|
|
|
|
|
2013-10-28 11:10:55 +01:00
|
|
|
\QC generates a default QML file that you can modify to create the main view
|
|
|
|
|
of the application.
|
2013-06-11 14:23:35 +02:00
|
|
|
|
|
|
|
|
\section1 Creating the Main View
|
|
|
|
|
|
|
|
|
|
The main view of the application displays an SVG bubble image at the center
|
|
|
|
|
of the main window.
|
|
|
|
|
|
2015-06-29 14:49:40 +02:00
|
|
|
To use \l{accelbubble/Bluebubble.svg}{Bluebubble.svg} in your project,
|
|
|
|
|
copy it to the project directory (same subdirectory as the QML file).
|
2014-12-11 15:43:19 +01:00
|
|
|
The image appears in \uicontrol Resources. You can also use any other
|
2013-10-28 11:10:55 +01:00
|
|
|
image or a QML type, instead.
|
2013-06-11 14:23:35 +02:00
|
|
|
|
|
|
|
|
\list 1
|
|
|
|
|
|
2014-12-11 15:43:19 +01:00
|
|
|
\li In the \uicontrol Projects view, double-click the main.qml file
|
2013-10-28 11:10:55 +01:00
|
|
|
to open it in the code editor.
|
2013-06-11 14:23:35 +02:00
|
|
|
|
2015-06-29 14:49:40 +02:00
|
|
|
\li Click \uicontrol Design to open the file in \QMLD.
|
2013-06-11 14:23:35 +02:00
|
|
|
|
2015-06-29 14:49:40 +02:00
|
|
|
\li In the \uicontrol Navigator, select \uicontrol Label and press
|
|
|
|
|
\key Delete to delete it.
|
2013-06-11 14:23:35 +02:00
|
|
|
|
2015-06-29 14:49:40 +02:00
|
|
|
\li Select \uicontrol ApplicationWindow to edit its properties.
|
|
|
|
|
|
|
|
|
|
\list a
|
2013-06-11 14:23:35 +02:00
|
|
|
|
2015-06-29 14:49:40 +02:00
|
|
|
\li In the \uicontrol Id field, enter \e mainWindow, to be able to
|
|
|
|
|
reference the window from other places.
|
|
|
|
|
|
|
|
|
|
\li In the \uicontrol Title field, type \e {Accelerate Bubble}.
|
|
|
|
|
|
|
|
|
|
\endlist
|
2013-06-11 14:23:35 +02:00
|
|
|
|
2014-12-11 15:43:19 +01:00
|
|
|
\li In \uicontrol Library > \uicontrol Resources, select Bluebubble.svg
|
2013-10-28 11:10:55 +01:00
|
|
|
and drag and drop it to the canvas.
|
2013-06-11 14:23:35 +02:00
|
|
|
|
2014-12-11 15:43:19 +01:00
|
|
|
\li In the \uicontrol Properties pane, \uicontrol Id field, enter \e bubble to be
|
2013-10-28 11:10:55 +01:00
|
|
|
able to reference the image from other places.
|
2013-06-11 14:23:35 +02:00
|
|
|
|
2013-10-28 11:10:55 +01:00
|
|
|
\li In the code editor, add the following new properties to the image to
|
2015-06-29 14:49:40 +02:00
|
|
|
position the image at the center of the application window when the
|
2013-10-28 11:10:55 +01:00
|
|
|
application starts:
|
2013-06-11 14:23:35 +02:00
|
|
|
|
2013-10-28 11:10:55 +01:00
|
|
|
\quotefromfile accelbubble/main.qml
|
2013-06-11 14:23:35 +02:00
|
|
|
\skipto Image
|
2013-10-28 11:10:55 +01:00
|
|
|
\printuntil bubble.width
|
2013-06-11 14:23:35 +02:00
|
|
|
|
2015-06-29 14:49:40 +02:00
|
|
|
\li Set the x and y position of the image based on the new properties:
|
2013-06-11 14:23:35 +02:00
|
|
|
|
|
|
|
|
\dots
|
2013-10-28 11:10:55 +01:00
|
|
|
\printuntil centerY
|
|
|
|
|
\skipto /^\}/
|
2013-06-11 14:23:35 +02:00
|
|
|
\printuntil }
|
|
|
|
|
|
2015-06-29 14:49:40 +02:00
|
|
|
\endlist
|
2013-06-11 14:23:35 +02:00
|
|
|
|
2015-06-29 14:49:40 +02:00
|
|
|
For an example, see \l{accelbubble/main.qml}{main.qml}.
|
2013-06-11 14:23:35 +02:00
|
|
|
|
|
|
|
|
\section1 Moving the Bubble
|
|
|
|
|
|
|
|
|
|
Now that the visual elements are in place, let us move the bubble based on
|
|
|
|
|
Accelerometer sensor values.
|
|
|
|
|
|
|
|
|
|
\list 1
|
2013-10-28 11:10:55 +01:00
|
|
|
\li Add the following import statement to main.qml:
|
2013-06-11 14:23:35 +02:00
|
|
|
|
2013-10-28 11:10:55 +01:00
|
|
|
\code
|
|
|
|
|
import QtSensors 5.0
|
|
|
|
|
\endcode
|
2013-06-11 14:23:35 +02:00
|
|
|
|
2013-11-25 17:37:19 +01:00
|
|
|
\li Add the \l{Accelerometer} type with the necessary properties:
|
2013-06-11 14:23:35 +02:00
|
|
|
|
2013-10-28 11:10:55 +01:00
|
|
|
\quotefromfile accelbubble/main.qml
|
2013-06-11 14:23:35 +02:00
|
|
|
\skipto Accelerometer
|
|
|
|
|
\printuntil true
|
|
|
|
|
\skipto }
|
|
|
|
|
\printuntil }
|
|
|
|
|
|
|
|
|
|
\li Add the following JavaScript functions that calculate the
|
|
|
|
|
x and y position of the bubble based on the current Accelerometer
|
|
|
|
|
values:
|
|
|
|
|
|
2013-10-28 11:10:55 +01:00
|
|
|
\quotefromfile accelbubble/main.qml
|
|
|
|
|
\skipto function
|
|
|
|
|
\printuntil Math.atan(x
|
|
|
|
|
\printuntil }
|
2013-06-11 14:23:35 +02:00
|
|
|
|
|
|
|
|
\li Add the following JavaScript code for \a onReadingChanged signal of
|
|
|
|
|
Accelerometer type to make the bubble move when the Accelerometer
|
|
|
|
|
values change:
|
|
|
|
|
|
2013-10-28 11:10:55 +01:00
|
|
|
\quotefromfile accelbubble/main.qml
|
|
|
|
|
\skipto onReadingChanged
|
|
|
|
|
\printuntil }
|
2013-06-11 14:23:35 +02:00
|
|
|
|
2014-04-08 12:28:47 +02:00
|
|
|
We want to ensure that the position of the bubble is always within
|
|
|
|
|
the bounds of the screen. If the Accelerometer returns not a number
|
|
|
|
|
(NaN), the value is ignored and the bubble position is not updated.
|
2013-06-11 14:23:35 +02:00
|
|
|
\li Add SmoothedAnimation behavior on the \a x and \a y properties of
|
|
|
|
|
the bubble to make its movement look smoother.
|
|
|
|
|
|
2013-10-28 11:10:55 +01:00
|
|
|
\quotefromfile accelbubble/main.qml
|
|
|
|
|
\skipto Behavior
|
|
|
|
|
\printuntil x
|
|
|
|
|
\printuntil }
|
|
|
|
|
\printuntil }
|
2013-06-11 14:23:35 +02:00
|
|
|
\endlist
|
|
|
|
|
|
2014-03-27 17:32:48 +01:00
|
|
|
\section1 Locking Device Orientation
|
|
|
|
|
|
|
|
|
|
The device display is rotated by default when the device orientation
|
|
|
|
|
changes between portrait and landscape. For this example, it would be
|
|
|
|
|
better for the screen orientation to be fixed.
|
|
|
|
|
|
|
|
|
|
To lock the orientation to portrait or landscape on Android, specify it in
|
|
|
|
|
an AndroidManifest.xml that you can generate in \QC. For more information,
|
|
|
|
|
see \l{Editing Manifest Files}.
|
|
|
|
|
|
|
|
|
|
On iOS, you can lock the device orientation in a Info.plist file that you
|
|
|
|
|
specify in the .pro file as the value of the QMAKE_INFO_PLIST variable.
|
|
|
|
|
|
2013-10-28 11:10:55 +01:00
|
|
|
\section1 Adding Dependencies
|
2013-06-11 14:23:35 +02:00
|
|
|
|
2013-10-28 11:10:55 +01:00
|
|
|
Update the accelbubble.pro file with the following library dependency
|
|
|
|
|
information:
|
2013-06-11 14:23:35 +02:00
|
|
|
|
2013-10-28 11:10:55 +01:00
|
|
|
\code
|
|
|
|
|
QT += quick sensors svg xml
|
|
|
|
|
\endcode
|
2013-06-11 14:23:35 +02:00
|
|
|
|
2014-03-27 17:32:48 +01:00
|
|
|
On iOS, you must link to the above libraries statically, by adding the
|
|
|
|
|
plugin names explicitly as values of the QTPLUGIN variable. Specify a
|
|
|
|
|
qmake scope for iOS builds (which can also contain the QMAKE_INFO_PLIST
|
|
|
|
|
variable):
|
|
|
|
|
|
|
|
|
|
\code
|
|
|
|
|
ios {
|
|
|
|
|
QTPLUGIN += qsvg qsvgicon qtsensors_ios
|
|
|
|
|
QMAKE_INFO_PLIST = Info.plist
|
|
|
|
|
}
|
|
|
|
|
\endcode
|
|
|
|
|
|
2014-12-11 15:43:19 +01:00
|
|
|
After adding the dependencies, select \uicontrol Build > \uicontrol {Run qmake} to apply
|
2014-03-27 17:32:48 +01:00
|
|
|
the changes to the Makefile of the project.
|
|
|
|
|
|
|
|
|
|
\section1 Adding Resources
|
|
|
|
|
|
|
|
|
|
You need to add the Bluebubble.svg image file to the application resources
|
|
|
|
|
for deployment to mobile devices:
|
|
|
|
|
|
|
|
|
|
\list 1
|
|
|
|
|
|
2014-12-11 15:43:19 +01:00
|
|
|
\li In the \uicontrol Projects view, double-click the qml.qrc file to open it
|
2014-03-27 17:32:48 +01:00
|
|
|
in the resource editor.
|
|
|
|
|
|
2014-12-11 15:43:19 +01:00
|
|
|
\li Select \uicontrol Add to add Bluebubble.svg.
|
2014-03-27 17:32:48 +01:00
|
|
|
|
|
|
|
|
\endlist
|
|
|
|
|
|
2013-10-28 11:10:55 +01:00
|
|
|
\section1 Running the Application
|
2013-06-11 14:23:35 +02:00
|
|
|
|
2014-03-27 17:32:48 +01:00
|
|
|
The application is complete and ready to be deployed to a device:
|
2013-06-11 14:23:35 +02:00
|
|
|
|
2013-10-28 11:10:55 +01:00
|
|
|
\list 1
|
2013-06-11 14:23:35 +02:00
|
|
|
|
2014-03-27 17:32:48 +01:00
|
|
|
\li Enable \e{USB Debugging} on the Android device or \e{developer mode}
|
|
|
|
|
on the iOS device.
|
2013-06-11 14:23:35 +02:00
|
|
|
|
2013-10-28 11:10:55 +01:00
|
|
|
\li Connect the device to the development PC.
|
2013-06-11 14:23:35 +02:00
|
|
|
|
|
|
|
|
If you are using a device running Android v4.2.2, it should prompt you to
|
|
|
|
|
verify the connection to allow USB debugging from the PC it is connected
|
2015-06-29 14:49:40 +02:00
|
|
|
to. To avoid such prompts every time you connect the device, select the
|
|
|
|
|
\uicontrol {Always allow from the computer} check box, and then select
|
|
|
|
|
\uicontrol OK.
|
2013-06-11 14:23:35 +02:00
|
|
|
|
2013-10-28 11:10:55 +01:00
|
|
|
\li To run the application on the device, press \key {Ctrl+R}.
|
2013-06-11 14:23:35 +02:00
|
|
|
|
2013-10-28 11:10:55 +01:00
|
|
|
\endlist
|
2013-06-11 14:23:35 +02:00
|
|
|
*/
|