×
Namespaces

Variants
Actions
(Difference between revisions)

Fundamental use cases for porting iPhone and Android applications to Qt

From Nokia Developer Wiki
Jump to: navigation, search
ilkkal (Talk | contribs)
(Ilkkal - clear so it can be overwritten (hopefully))
ilkkal (Talk | contribs)
(Ilkkal - New content pasted in since moving the work in progress page failed)
Line 1: Line 1:
 +
This article introduces some fundamental use cases that developers  porting applications from iPhone and Android will need to implement, and  discusses sample solutions. In  general, Qt provides all modern classes  and functionalities familiar  from iPhone and Android. This makes it  easy to keep the application  logic close to the original when porting  (see  [http://doc.qt.nokia.com/main-snapshot/classes.html Snapshot of Qt  classes]).
  
 +
== Using Internet Services ==
 +
 +
Mobile  applications are extremely likely to use the Internet — whether  loading  news stories from a server, using a remote service API such as  Facebook  or Twitter, or uploading photos to a photo-sharing service.
 +
 +
While  protocols and service APIs vary considerably, it is very typical that  the traffic happens on top of the HTTP protocol and is described as XML  or JSON content.
 +
 +
The QNetworkAccessManager  class[http://doc.qt.nokia.com/4.7/qnetworkaccessmanager.html] makes it  easy to interact with remote services. The class handles common  configuration and settings for the requests it sends, such as settings  for proxies and caching. The API is asynchronous and uses signals to  notify clients about events such as finished requests.  QNetworkAccessManager supports HTTP(S) and FTP.
 +
 +
A simple example of retrieving data using an URL asynchronously: (''replyFinished()'' slot is called upon completion)
 +
<code cpp>
 +
    ...
 +
    QUrl url("http://www.example.com/example.xml");
 +
    QNetworkAccessManager *manager = new QNetworkAccessManager(this);
 +
    connect(manager, SIGNAL(finished(QNetworkReply*)),
 +
            this, SLOT(replyFinished(QNetworkReply*)));
 +
    manager->get(QNetworkRequest(url);
 +
    ...
 +
 +
myClass::replyFinished(QNetworkReply *reply) {
 +
    QByteArray replyData(reply->readAll());
 +
    // Process the reply data
 +
}
 +
</code>
 +
 +
See more info at http://doc.trolltech.com/main-snapshot/qnetworkaccessmanager.html
 +
 +
== Web View ==
 +
 +
Qt  has a WebView class to display web content inside the application, like  iPhone and Android. Thus, your existing server-side web  content is  directly reusable in Qt platforms.
 +
 +
A website can be  loaded onto ''QWebView'' with the ''load()'' function. Like all Qt  widgets, the show() function must be invoked in order to display  QWebView.
 +
 +
<code cpp>
 +
QWebView *view = new QWebView(parent);
 +
view->load(QUrl("http://www.forum.nokia.com/"));
 +
view->show();
 +
</code>
 +
 +
[http://doc.trolltech.com/4.7-snapshot/qwebview.html Read more]
 +
 +
== Media Usage ==
 +
 +
Many  application ideas and concepts can be realised thanks to the ease and  convenience of the audio/video capabilities of Qt.
 +
 +
Qt provides a quick and simple way to display images and simple animations using the QMovie class:
 +
<code cpp>
 +
QLabel label;
 +
QMovie *movie = new QMovie("animations/fire.gif");
 +
label.setMovie(movie);
 +
movie->start();
 +
</code>
 +
 +
Also, the common task of playing an audio file can be easily accomplished:
 +
<code cpp>
 +
QSound::play("mysounds/bells.wav");
 +
</code>
 +
 +
For  more complex cases, Qt provides the  [http://doc.trolltech.com/4.7-snapshot/phonon.html Phonon multimedia  framework]. Phonon provides functionality for playback of the most  common multimedia formats. The media can be read from files or streamed  over a network, using a QURL to a file.
 +
 +
Music file playback can be constructed as follows:
 +
<code cpp>
 +
Phonon::MediaObject *music =
 +
        Phonon::createPlayer(Phonon::MusicCategory,
 +
                            Phonon::MediaSource("/path/song.mp3"));
 +
music->play();
 +
</code>
 +
 +
Similarly, using the VideoPlayer class:
 +
<code cpp>
 +
Phonon::VideoPlayer *player =
 +
        new Phonon::VideoPlayer(Phonon::VideoCategory, parentWidget);
 +
player->play(url);
 +
</code>
 +
 +
Phonon supports standard playback tasks like play, pause, stop, volume and seek.
 +
 +
== Application Data Storage ==
 +
 +
SQLite  has changed the way you store and read data easily in mobile  applications, and there's no reason to change it. Qt allows the  application to use either the device's own SQLite database or include  one inside Qt project.
 +
 +
In addition to features that are  familiar from iPhone and Android, Qt also provides an offline storage  API. With the offline storage API, you can use SQLite directly from QML  code with an intuitive JavaScript interface.
 +
 +
[http://doc.qt.nokia.com/4.7-snapshot/qdeclarativeglobalobject.html Read more]
 +
 +
Qt provides several different methods for storing data.
 +
 +
Simple  data, such as application settings, is easily handled with QSettings  [http://doc.trolltech.com/main-snapshot/qsettings.html]. All details are  handled automatically:
 +
<code cpp>
 +
QSettings settings("CompanyName", "ApplicationName");
 +
settings.setValue("store/price", 13);
 +
...
 +
int price = settings.value("store/price").toInt();
 +
</code>
 +
 +
More  complex data can be serialized into a binary form using QDataStream  [http://doc.trolltech.com/main-snapshot/qdatastream.html].
 +
Serialization  of C++'s basic data types, such as char, short, int and char*, is  automatic. Serialization of more complex data is accomplished by  breaking up the data into these primitive units. An XML format for data  storage is available with QtXml  [http://doc.trolltech.com/main-snapshot/qtxml.html], which provides a  stream reader and writer for XML documents, and C++ implementations of  SAX and DOM.
 +
 +
The most powerful data storage method is  QtSql [http://doc.trolltech.com/main-snapshot/qtsql.html], which  provides full SQL database functionalities. The following snippet  creates a to-do list into a local database, inserts some data there, and  reads it back selectively.
 +
 +
<code cpp>
 +
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
 +
db.setDatabaseName("myDataBase");
 +
 +
QSqlQuery query;
 +
query.exec("CREATE TABLE items (id int primary key, item TEXT, description TEXT)");
 +
query.exec("INSERT INTO items values(101, 'Shopping list', 'Milk')");
 +
query.exec("INSERT INTO items values(102, 'Shopping list', 'Beer')");
 +
 +
query.exec("SELECT * FROM items WHERE description='Beer'");
 +
 +
while (query.next()) {
 +
    QString list = query.value(1).toString();
 +
    QString item = query.value(2).toString();
 +
    qDebug() << list;
 +
    qDebug() << item;
 +
}
 +
</code>
 +
 +
A temporary memory based database can be used by setting ':memory:' as the database name.
 +
 +
== Useful features for porting ==
 +
 +
This  section covers some of the most common features and examples for  porting cases, grouped by typical applications. Application sketches on  the left side of this document illustrate common application types on  iPhone and Android devices. UI component images on the right show some  of the most common Maemo/Nokia N900 elements used for building  native-like user experiences.
 +
 +
{|
 +
|-
 +
| [[File:qtexampleapps_2.jpg]]
 +
|
 +
{|
 +
|-
 +
| '''QML ListView''' The ListView element provides a list or icon view onto a model. [http://doc.qt.nokia.com/latest/qml-listview.html Read more]
 +
|-
 +
| '''QML Column''' The Column element provides a  vertical layout for managing other  QML elements.  [http://doc.qt.nokia.com/latest/qml-column.html Read  more]
 +
|-
 +
| '''Example: Dynamic linking''' Plug & Paint  example demonstrates how to write Qt applications that can be extended through dynamically loaded plugins  [http://doc.qt.nokia.com/4.7-snapshot/tools-plugandpaint.html Open]
 +
|-
 +
| '''Example: Server''' Fortune Server example shows how to create a server in Qt for a simple network service [http://doc.qt.nokia.com/4.7-snapshot/network-fortuneserver.html Open]
 +
|-
 +
| '''Feature: State Framework''' State Machine framework provides an API and execution model that can be used to easily create UI functionality in Qt applications [http://doc.qt.nokia.com/4.7-snapshot/statemachine-api.html Read more]
 +
|-
 +
| '''Example: State transitions''' Event Transitions example shows how to use event transitions, a feature of The State Machine Framework [http://doc.qt.nokia.com/4.7-snapshot/statemachine-eventtransitions.html Open]
 +
|}
 +
|}
 +
 +
[[File:ui-elements.png|250px|right|thumb|Common Maemo UI buttons and text elements]]
 +
[[File:ui-menu.png|250px|right|thumb|Maemo UI menu]]
 +
[[File:ui-gallery.png|250px|right|thumb|Sample Maemo thumbnail list]]
 +
[[File:ui-portrait-buttons.png|250px|right|thumb|Common Maemo UI portrait list and buttons]]
 +
[[File:ui-portrait-elements.png|250px|right|thumb|Maemo application dialog example]]
 +
[[File:ui-landscape-buttons.png|250px|right|thumb|Maemo landscape list and buttons]]
 +
[[File:ui-player-sample.png|250px|right|thumb|Sample Maemo application view]]
 +
 +
{|
 +
|-
 +
| [[File:qtexampleapps_3.jpg]]
 +
|
 +
{|
 +
|-
 +
| '''Feature: View transform''' By applying a transformation to the view, you can easily add support for common navigation features such as zooming and rotating [http://doc.qt.nokia.com/4.7-snapshot/graphicsview.html#zooming-and-rotating Read more]
 +
|-
 +
| '''Example: Drawing''' Basic Drawing  example shows how to display basic graphics primitives in a variety of  styles [http://doc.qt.nokia.com/4.7-snapshot/painting-basicdrawing.html  Open]
 +
|-
 +
| '''Example: Complex paths''' Painter Paths  example shows how painter paths can be used to build complex shapes for  rendering  [http://doc.qt.nokia.com/4.7-snapshot/painting-painterpaths.html Open]
 +
|-
 +
| '''Feature: Draw path''' Draws the given painter path using the current pen for outline and the current brush for filling [http://doc.qt.nokia.com/4.7-snapshot/qpainter.html#drawPath Read more]
 +
|-
 +
| '''Example: Path stroke''' Path Stroke example demonstrates various types of pens that can be used in Qt for paths [http://doc.qt.nokia.com/4.7-snapshot/demos-pathstroke.html Open]
 +
|-
 +
| '''Example: Advanced drawing''' Advanced Drawing example shows how to use advanced vector techniques to draw text using a QPainterPath [http://doc.qt.nokia.com/4.7-snapshot/demos-deform.html Open]
 +
|}
 +
|}
 +
 +
{|
 +
|-
 +
| [[File:qtexampleapps_5.jpg]]
 +
|
 +
{|
 +
|-
 +
| '''Example: XML with DOM''' QDomDocument enable developers to access the contents of XML files using a Document Object Model (DOM) API. Simple DOM Model example shows how to use it. [http://doc.qt.nokia.com/4.7-snapshot/itemviews-simpledommodel.html Open]
 +
|-
 +
| '''Example: Image composition''' Image  Composition example demonstrates the powerful image composition features  supported in Qt.  [http://doc.qt.nokia.com/4.7-snapshot/painting-imagecomposition.html  Open]
 +
|-
 +
| '''Example: Advanced composition''' Composition  demo shows some of the more advanced composition modes supported by Qt  [http://doc.qt.nokia.com/4.7-snapshot/demos-composition.html Open]
 +
|-
 +
| '''Example: SVG viewer''' SVG Viewer example shows how to add SVG viewing support to applications for great scalable UIs and graphics. [http://doc.qt.nokia.com/4.7-snapshot/painting-svgviewer.html Open]
 +
|-
 +
| '''Example: State toggle''' Two-way button example shows how to use State Machine Framework to implement a logic that toggles state when a button is clicked [http://doc.qt.nokia.com/4.7-snapshot/statemachine-twowaybutton.html Open]
 +
|-
 +
| '''Example: State animations''' Move Blocks  example shows how to animate items in a QGraphicsScene using State  Machine Framework with a custom transition.  [http://doc.qt.nokia.com/4.7-snapshot/animation-moveblocks.html Open]
 +
|-
 +
| '''Example: State animations''' Application Chooser example shows how to use the Qt state machine and the animation framework. [http://doc.qt.nokia.com/4.7-snapshot/animation-appchooser.html Open]
 +
|}
 +
|}
 +
 +
{|
 +
|-
 +
| [[File:qtexampleapps_7.jpg]]
 +
|
 +
{|
 +
|-
 +
| '''Class: Syntax highlighting''' Syntax highlighters are often used when the user is entering text in a specific format and help the user to read the text. [http://doc.qt.nokia.com/4.7-snapshot/qsyntaxhighlighter.html Read more]
 +
|-
 +
| '''Example: Auto completer''' Auto-complete makes forms easier to use in mobile environments. Completer example shows how to provide string-completion facilities for an input widget based on defined data. [http://doc.qt.nokia.com/4.7-snapshot/tools-completer.html Open]
 +
|-
 +
| '''Example: Custom completer''' Custom Completer is an other example of how to provide string-completion facilities for an input widget[http://doc.qt.nokia.com/4.7-snapshot/tools-customcompleter.html Open]
 +
|-
 +
| '''Example: Google suggest''' Google Suggest  example demonstrates how to use the QNetworkAccessManager class to  obtain a list of suggestions from the Google search engine as the user  types into a QLineEdit  [http://doc.qt.nokia.com/4.7-snapshot/network-googlesuggest.html Open]
 +
|-
 +
| '''Example: HTTP Client''' Qt provides network-transparent features for many media and content classes, but HTTP interaction is still the very basic of modern development. HTTP example demonstrates a how to fetch files specified by URLs from remote hosts [http://doc.qt.nokia.com/4.7-snapshot/network-http.html Open]
 +
|-
 +
| '''Example: Web view''' Web view is a powerful tool for easy content handling. DOM Traversal example shows how to use the QWebElement class to access the structure of web view's HTML page [http://doc.qt.nokia.com/4.7-snapshot/webkit-domtraversal.html Open]
 +
|-
 +
| '''Example: Web view selector''' Simple Selector example shows how to use QWebElement to access the Document Object Model (DOM) in a Web page [http://doc.qt.nokia.com/4.7-snapshot/webkit-simpleselector.html Open]
 +
|}
 +
|}
 +
 +
{|
 +
|-
 +
| [[File:qtexampleapps_9.jpg]]
 +
|
 +
{|
 +
|-
 +
| '''QML GridView''' The GridView element allows displaying model data in a grid layout [http://doc.qt.nokia.com/latest/qml-gridview.html Read more]
 +
|-
 +
| '''Example: Sorting''' Custom Sort/Filter Model  example illustrates how to perform advanced sorting and filtering in Qt  [http://doc.qt.nokia.com/4.7-snapshot/itemviews-customsortfiltermodel.html  Open]
 +
|-
 +
| '''Example: Localization''' Qt makes  localization easy. Internationalization (I18N) example demonstrates Qt's  support for translated text  [http://doc.qt.nokia.com/4.7-snapshot/tools-i18n.html Open]
 +
|-
 +
| '''Example: Regexps''' Regular Expressions (RegExp) example shows how regular expressions in Qt are used with strings [http://doc.qt.nokia.com/4.7-snapshot/tools-regexp.html Open]
 +
|-
 +
| '''Example: SQL query''' Query Model example shows how to make customized versions of data obtained from a SQL query [http://doc.qt.nokia.com/4.7-snapshot/sql-querymodel.html Open]
 +
|-
 +
| '''Example: SQL drill-down''' Drill Down example shows how to read data from a database as well as submit changes [http://doc.qt.nokia.com/4.7-snapshot/sql-drilldown.html Open]
 +
|}
 +
|}
 +
 +
{|
 +
|-
 +
| [[File:qtexampleapps_1.jpg]]
 +
|
 +
{|
 +
|-
 +
| '''Example: Audio output''' QAudioOutput class provides an interface for sending audio data to an audio output device. Audio output example demonstrates use of this class. [http://doc.qt.nokia.com/4.7-snapshot/multimedia-audiooutput.html Open]
 +
|-
 +
| '''Example: Music player''' Music Player Example shows how to use Phonon - the multimedia framework that comes with Qt - to create a simple music player. [http://doc.qt.nokia.com/4.7-snapshot/phonon-qmusicplayer.html Open]
 +
|-
 +
| '''Example: Bearer management''' Bearer Cloud example shows how to use the Bearer Management API to monitor the connectivity state of the local device, i.e. for loading offline content only while WLAN is available [http://doc.qt.nokia.com/4.7-snapshot/network-bearercloud.html Open]
 +
|}
 +
|}
 +
 +
{|
 +
|-
 +
| [[File:qtexampleapps_4.jpg]]
 +
|
 +
{|
 +
|-
 +
| '''Example: Audio input''' Audio Input example  shows how to use QAudioInput class, that provides an interface for  receiving audio data from an audio input device.  [http://doc.qt.nokia.com/4.7-snapshot/multimedia-audioinput.html Open]
 +
|-
 +
| '''Example: Gradients'''  Gradients  Example show how the various types of gradients can be used in Qt.  [http://doc.qt.nokia.com/4.7-snapshot/demos-gradients.html Open]
 +
|}
 +
|}
 +
 +
{|
 +
|-
 +
| [[File:qtexampleapps_6.jpg]]
 +
|
 +
{|
 +
|-
 +
| '''Example: Drag'n'drop icons''' Drag'n'drop is the basic feature in modern user interfaces. Draggable Icons example shows how to drag and drop image data between widgets in Standard view [http://doc.qt.nokia.com/4.7-snapshot/draganddrop-draggableicons.html Open]
 +
|-
 +
| '''Example: Drag'n'drop text''' Draggable Text  example shows how to drag and drop textual data between widgets in  Standard view  [http://doc.qt.nokia.com/4.7-snapshot/draganddrop-draggabletext.html  Open]
 +
|-
 +
| '''Feature: Drag'n'drop''' Graphics View  framework provides drag and drop support for the scene, and for each and  every item  [http://doc.qt.nokia.com/4.7-snapshot/graphicsview.html#drag-and-drop  Read more]
 +
|-
 +
| '''Example: Fetch more''' Fetch More  example shows how two add items to an item view model on demand,  commonly used by applications with a list view  [http://doc.qt.nokia.com/4.7-snapshot/itemviews-fetchmore.html Open]
 +
|-
 +
| '''Example: FTP Client''' FTP Client example demonstrates how Qt can be used to list the available files on an FTP server and download them. [http://doc.qt.nokia.com/4.7-snapshot/network-qftp.html Open]
 +
|-
 +
| '''Example: P2P chat''' Network Chat example demonstrates a stateful peer-to-peer Chat client that uses broadcasting with QUdpSocket and QNetworkInterface to discover its peers. [http://doc.qt.nokia.com/4.7-snapshot/network-network-chat.html Open]
 +
|}
 +
|}
 +
 +
{|
 +
|-
 +
| [[File:qtexampleapps_8.jpg]]
 +
|
 +
{|
 +
|-
 +
| '''Example: Inline-SVG''' Text Object example shows how to reduce layout work and insert an SVG file (such as status icons, emoticons etc) into a QTextDocument [http://doc.qt.nokia.com/4.7-snapshot/richtext-textobject.html Open]
 +
|-
 +
| '''Example: Undo framework''' Undo Framework example shows how to easily implement advanced undo/redo functionality with the Qt undo framework [http://doc.qt.nokia.com/4.7-snapshot/tools-undoframework.html Open]
 +
|-
 +
| '''Feature: QtScript''' QtScript module  provides classes for making Qt applications scriptable.  [http://doc.qt.nokia.com/4.7-snapshot/qtscript.html Read more]
 +
|-
 +
| '''Example: Qt scripting''' Qt Scripting example demonstrates how to implement the functionality of a calculator widget [http://doc.qt.nokia.com/4.7-snapshot/script-calculator.html Open]
 +
|}
 +
|}
 +
 +
{|
 +
|-
 +
| [[File:qtexampleapps_10.jpg]]
 +
|
 +
{|
 +
|-
 +
| '''Example: Generated icons''' Qicon class in Qt creates automatically different button states from the given image object. Widget Icons example demonstrates how to use this great feature. [http://doc.qt.nokia.com/4.7-snapshot/widgets-icons.html Open]
 +
|-
 +
| '''Class: Grid layout''' QGraphicsGridLayout class provides a grid layout for managing widgets in Graphics View [http://doc.qt.nokia.com/4.7-snapshot/qgraphicsgridlayout.html Read more]
 +
|-
 +
| '''Feature: Painter rotate''' Adjusting  coordinate system on-the-fly makes drawing of custom layouts easier in  some cases. QPainter's rotate functionality rotates the coordinate  system the given angle clockwise.    [http://doc.qt.nokia.com/4.7-snapshot/qpainter.html#rotate ]
 +
|}
 +
|}
 +
 +
The sketches were created with [[http://balsamiq.com/products/mockups Balsamiq Mockups]].
 +
 +
*  See also [http://www.forum.nokia.com/Design/ Forum Nokia Design and User  Experience Guide] for ideas on how to achieve the best possible user  experience when porting your application for Nokia devices.
 +
 +
[[Category:Porting]][[Category:Qt Quick]]

Revision as of 14:12, 22 June 2011

This article introduces some fundamental use cases that developers porting applications from iPhone and Android will need to implement, and discusses sample solutions. In general, Qt provides all modern classes and functionalities familiar from iPhone and Android. This makes it easy to keep the application logic close to the original when porting (see Snapshot of Qt classes).

Contents

Using Internet Services

Mobile applications are extremely likely to use the Internet — whether loading news stories from a server, using a remote service API such as Facebook or Twitter, or uploading photos to a photo-sharing service.

While protocols and service APIs vary considerably, it is very typical that the traffic happens on top of the HTTP protocol and is described as XML or JSON content.

The QNetworkAccessManager class[1] makes it easy to interact with remote services. The class handles common configuration and settings for the requests it sends, such as settings for proxies and caching. The API is asynchronous and uses signals to notify clients about events such as finished requests. QNetworkAccessManager supports HTTP(S) and FTP.

A simple example of retrieving data using an URL asynchronously: (replyFinished() slot is called upon completion)

    ...
QUrl url("http://www.example.com/example.xml");
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
connect(manager, SIGNAL(finished(QNetworkReply*)),
this, SLOT(replyFinished(QNetworkReply*)));
manager->get(QNetworkRequest(url);
...
 
myClass::replyFinished(QNetworkReply *reply) {
QByteArray replyData(reply->readAll());
// Process the reply data
}

See more info at http://doc.trolltech.com/main-snapshot/qnetworkaccessmanager.html

Web View

Qt has a WebView class to display web content inside the application, like iPhone and Android. Thus, your existing server-side web content is directly reusable in Qt platforms.

A website can be loaded onto QWebView with the load() function. Like all Qt widgets, the show() function must be invoked in order to display QWebView.

QWebView *view = new QWebView(parent);
view->load(QUrl("http://www.forum.nokia.com/"));
view->show();

Read more

Media Usage

Many application ideas and concepts can be realised thanks to the ease and convenience of the audio/video capabilities of Qt.

Qt provides a quick and simple way to display images and simple animations using the QMovie class:

QLabel label;
QMovie *movie = new QMovie("animations/fire.gif");
label.setMovie(movie);
movie->start();

Also, the common task of playing an audio file can be easily accomplished:

QSound::play("mysounds/bells.wav");

For more complex cases, Qt provides the Phonon multimedia framework. Phonon provides functionality for playback of the most common multimedia formats. The media can be read from files or streamed over a network, using a QURL to a file.

Music file playback can be constructed as follows:

Phonon::MediaObject *music =
Phonon::createPlayer(Phonon::MusicCategory,
Phonon::MediaSource("/path/song.mp3"));
music->play();

Similarly, using the VideoPlayer class:

Phonon::VideoPlayer *player =
new Phonon::VideoPlayer(Phonon::VideoCategory, parentWidget);
player->play(url);

Phonon supports standard playback tasks like play, pause, stop, volume and seek.

Application Data Storage

SQLite has changed the way you store and read data easily in mobile applications, and there's no reason to change it. Qt allows the application to use either the device's own SQLite database or include one inside Qt project.

In addition to features that are familiar from iPhone and Android, Qt also provides an offline storage API. With the offline storage API, you can use SQLite directly from QML code with an intuitive JavaScript interface.

Read more

Qt provides several different methods for storing data.

Simple data, such as application settings, is easily handled with QSettings [2]. All details are handled automatically:

QSettings settings("CompanyName", "ApplicationName");
settings.setValue("store/price", 13);
...
int price = settings.value("store/price").toInt();

More complex data can be serialized into a binary form using QDataStream [3]. Serialization of C++'s basic data types, such as char, short, int and char*, is automatic. Serialization of more complex data is accomplished by breaking up the data into these primitive units. An XML format for data storage is available with QtXml [4], which provides a stream reader and writer for XML documents, and C++ implementations of SAX and DOM.

The most powerful data storage method is QtSql [5], which provides full SQL database functionalities. The following snippet creates a to-do list into a local database, inserts some data there, and reads it back selectively.

QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("myDataBase");
 
QSqlQuery query;
query.exec("CREATE TABLE items (id int primary key, item TEXT, description TEXT)");
query.exec("INSERT INTO items values(101, 'Shopping list', 'Milk')");
query.exec("INSERT INTO items values(102, 'Shopping list', 'Beer')");
 
query.exec("SELECT * FROM items WHERE description='Beer'");
 
while (query.next()) {
QString list = query.value(1).toString();
QString item = query.value(2).toString();
qDebug() << list;
qDebug() << item;
}

A temporary memory based database can be used by setting ':memory:' as the database name.

Useful features for porting

This section covers some of the most common features and examples for porting cases, grouped by typical applications. Application sketches on the left side of this document illustrate common application types on iPhone and Android devices. UI component images on the right show some of the most common Maemo/Nokia N900 elements used for building native-like user experiences.

Qtexampleapps 2.jpg
QML ListView The ListView element provides a list or icon view onto a model. Read more
QML Column The Column element provides a vertical layout for managing other QML elements. Read more
Example: Dynamic linking Plug & Paint example demonstrates how to write Qt applications that can be extended through dynamically loaded plugins Open
Example: Server Fortune Server example shows how to create a server in Qt for a simple network service Open
Feature: State Framework State Machine framework provides an API and execution model that can be used to easily create UI functionality in Qt applications Read more
Example: State transitions Event Transitions example shows how to use event transitions, a feature of The State Machine Framework Open
Common Maemo UI buttons and text elements
Maemo UI menu
Sample Maemo thumbnail list
Common Maemo UI portrait list and buttons
Maemo application dialog example
Maemo landscape list and buttons
Sample Maemo application view
Qtexampleapps 3.jpg
Feature: View transform By applying a transformation to the view, you can easily add support for common navigation features such as zooming and rotating Read more
Example: Drawing Basic Drawing example shows how to display basic graphics primitives in a variety of styles Open
Example: Complex paths Painter Paths example shows how painter paths can be used to build complex shapes for rendering Open
Feature: Draw path Draws the given painter path using the current pen for outline and the current brush for filling Read more
Example: Path stroke Path Stroke example demonstrates various types of pens that can be used in Qt for paths Open
Example: Advanced drawing Advanced Drawing example shows how to use advanced vector techniques to draw text using a QPainterPath Open
Qtexampleapps 5.jpg
Example: XML with DOM QDomDocument enable developers to access the contents of XML files using a Document Object Model (DOM) API. Simple DOM Model example shows how to use it. Open
Example: Image composition Image Composition example demonstrates the powerful image composition features supported in Qt. Open
Example: Advanced composition Composition demo shows some of the more advanced composition modes supported by Qt Open
Example: SVG viewer SVG Viewer example shows how to add SVG viewing support to applications for great scalable UIs and graphics. Open
Example: State toggle Two-way button example shows how to use State Machine Framework to implement a logic that toggles state when a button is clicked Open
Example: State animations Move Blocks example shows how to animate items in a QGraphicsScene using State Machine Framework with a custom transition. Open
Example: State animations Application Chooser example shows how to use the Qt state machine and the animation framework. Open
Qtexampleapps 7.jpg
Class: Syntax highlighting Syntax highlighters are often used when the user is entering text in a specific format and help the user to read the text. Read more
Example: Auto completer Auto-complete makes forms easier to use in mobile environments. Completer example shows how to provide string-completion facilities for an input widget based on defined data. Open
Example: Custom completer Custom Completer is an other example of how to provide string-completion facilities for an input widgetOpen
Example: Google suggest Google Suggest example demonstrates how to use the QNetworkAccessManager class to obtain a list of suggestions from the Google search engine as the user types into a QLineEdit Open
Example: HTTP Client Qt provides network-transparent features for many media and content classes, but HTTP interaction is still the very basic of modern development. HTTP example demonstrates a how to fetch files specified by URLs from remote hosts Open
Example: Web view Web view is a powerful tool for easy content handling. DOM Traversal example shows how to use the QWebElement class to access the structure of web view's HTML page Open
Example: Web view selector Simple Selector example shows how to use QWebElement to access the Document Object Model (DOM) in a Web page Open
Qtexampleapps 9.jpg
QML GridView The GridView element allows displaying model data in a grid layout Read more
Example: Sorting Custom Sort/Filter Model example illustrates how to perform advanced sorting and filtering in Qt Open
Example: Localization Qt makes localization easy. Internationalization (I18N) example demonstrates Qt's support for translated text Open
Example: Regexps Regular Expressions (RegExp) example shows how regular expressions in Qt are used with strings Open
Example: SQL query Query Model example shows how to make customized versions of data obtained from a SQL query Open
Example: SQL drill-down Drill Down example shows how to read data from a database as well as submit changes Open
Qtexampleapps 1.jpg
Example: Audio output QAudioOutput class provides an interface for sending audio data to an audio output device. Audio output example demonstrates use of this class. Open
Example: Music player Music Player Example shows how to use Phonon - the multimedia framework that comes with Qt - to create a simple music player. Open
Example: Bearer management Bearer Cloud example shows how to use the Bearer Management API to monitor the connectivity state of the local device, i.e. for loading offline content only while WLAN is available Open
Qtexampleapps 4.jpg
Example: Audio input Audio Input example shows how to use QAudioInput class, that provides an interface for receiving audio data from an audio input device. Open
Example: Gradients Gradients Example show how the various types of gradients can be used in Qt. Open
Qtexampleapps 6.jpg
Example: Drag'n'drop icons Drag'n'drop is the basic feature in modern user interfaces. Draggable Icons example shows how to drag and drop image data between widgets in Standard view Open
Example: Drag'n'drop text Draggable Text example shows how to drag and drop textual data between widgets in Standard view Open
Feature: Drag'n'drop Graphics View framework provides drag and drop support for the scene, and for each and every item Read more
Example: Fetch more Fetch More example shows how two add items to an item view model on demand, commonly used by applications with a list view Open
Example: FTP Client FTP Client example demonstrates how Qt can be used to list the available files on an FTP server and download them. Open
Example: P2P chat Network Chat example demonstrates a stateful peer-to-peer Chat client that uses broadcasting with QUdpSocket and QNetworkInterface to discover its peers. Open
Qtexampleapps 8.jpg
Example: Inline-SVG Text Object example shows how to reduce layout work and insert an SVG file (such as status icons, emoticons etc) into a QTextDocument Open
Example: Undo framework Undo Framework example shows how to easily implement advanced undo/redo functionality with the Qt undo framework Open
Feature: QtScript QtScript module provides classes for making Qt applications scriptable. Read more
Example: Qt scripting Qt Scripting example demonstrates how to implement the functionality of a calculator widget Open
Qtexampleapps 10.jpg
Example: Generated icons Qicon class in Qt creates automatically different button states from the given image object. Widget Icons example demonstrates how to use this great feature. Open
Class: Grid layout QGraphicsGridLayout class provides a grid layout for managing widgets in Graphics View Read more
Feature: Painter rotate Adjusting coordinate system on-the-fly makes drawing of custom layouts easier in some cases. QPainter's rotate functionality rotates the coordinate system the given angle clockwise. [6]

The sketches were created with [Balsamiq Mockups].

211 page views in the last 30 days.
×