Viadeo Twitter Google Bookmarks ! Facebook Digg del.icio.us MySpace Yahoo MyWeb Blinklist Netvouz Reddit Simpy StumbleUpon Bookmarks Windows Live Favorites 
Logo Documentation Qt ·  Page d'accueil  ·  Toutes les classes  ·  Toutes les fonctions  ·  Vues d'ensemble  · 

Image Viewer Tutorial: Part 1

Welcome to the Image Viewer Tutorial.

Image Viewer Tutorial Contents

UI Specification

The Image Viewer application will run on a Greenphone SDK 4.3. The application consists of several screens.

List Screen

The list Screen shows a list of images. Each list item contains:

  • image thumbnail(32x32)
  • image name (without image format extension)

It shows all images available on the content system.

Actions

  • Left Soft Key: Options Menu
  • Central Soft Key: Open
  • Right Soft Key: Exit application
  • Options Menu: Show Options menu
    • Open : Opens current image in Image Screen
    • Rename: Rename image (no extension) with dialog
    • Delete: Delete image with dialog
    • Show Info: Show image info dialog

Key-Actions

  • none

Image Screen

The image screen shows the selected image. If the image is smaller than the screen, the image is not zoomed in. If the image is larger than the screen the image is fitted.

Actions

  • Left Soft Key: Options Menu
  • Central Soft Key: Fullscreen
  • Right Soft Key: Back to List Screen
  • Options Menu: Show Options menu
    • Rotate: Show Rotate sub-menu
      • Left: Rotates image 90° counter clock-wise
      • Right: Rotate image 90° clock-wise
    • Zoom Shows Zoom sub-menu
      • In: Zoom image 2 times in
      • Out: Zoom image 0.5 time out
    • Fullscreen: Show image in fullscreen

Key-Actions

  • none

Info Dialog

The info dialog displays information about the current image. The following informations shall be displayed:

  • Name
  • Mime-Type
  • Size (kB)
  • Last Modified
  • Size (Pixel)

Actions

  • Left Soft Key: -
  • Central Soft Key: -
  • Right Soft Key: Back

Key-Actions

  • none

Screenshots

List ScreenImage ScreenInfo ScreenRename Dialog
"ListScreen""ImageScreen""InfoScreen""RenameDialog"

Implementation

For the parts 1-7 the source code can be found in examples/imageviewer

Initial Setup

First the project file has to be created (qbuild.pro) for the Qt Extended build system.

File: qbuild.pro

    TEMPLATE=app
    CONFIG+=qtopia
    TARGET=iviewer

    CONFIG+=quicklaunch

    HEADERS += iviewer.h
    SOURCES += main.cpp iviewer.cpp

Here a Qt Extended application is declared (iviewer). The start code will be in main and the application in iviewer{.h,.cpp}.

File: main.cpp

    #include "iviewer.h"
    #include <qtopiaapplication.h>

    QTOPIA_ADD_APPLICATION(QTOPIA_TARGET, IViewer)
    QTOPIA_MAIN

"IViewer" is the class name and "iviewer" is the executable name. The syntax is described here.

Classes: QtopiaApplication

File: iviewer.h

    #ifndef IVIEWER_H
    #define IVIEWER_H

    #include <QStackedWidget>
    #include <QWidget>

    class IViewer : public QStackedWidget
    {
        Q_OBJECT
    public:
        IViewer(QWidget *parent=0, Qt::WFlags f=0);
    };

    #endif

Classes: QStackedWidget, QWidget

The IViewer should be a QStackedWidget derived class. The widget stack will be used later to manage our screens. The constructor needs to have the QWidget and Qt::WindowFlags as parameters, due to the QTOPIA macros in main.cpp.

File: iviewer.cpp

    #include "iviewer.h"
    IViewer::IViewer(QWidget *parent, Qt::WFlags /*f*/)
    : QStackedWidget(parent)
    {
        _listScreen  = 0;
        _imageScreen = 0;
        setCurrentWidget(listScreen());
        setWindowTitle("Image Viewer");
    }

Namespace: Qt

It is now time for the first run. qbuild must be called. When the QVFB emulator is running, the application can be started with ./iviewer. This should display an empty application in the emulator. Great!

The List Screen

The list screen will be derived from the QListWidget for convenience.

File: listscreen.h

    #ifndef LISTSCREEN_H
    #define LISTSCREEN_H

    #include <QListWidget>
    class IViewer;
    class QContentSet;
    class QContentSetModel;
    class QAction;
    class QKeyEvent;
    class ImageScreen;
    class InfoScreen;

    class ListScreen : public QListWidget
    {
        Q_OBJECT
    public:
        ListScreen(IViewer *viewer);
    private:
        IViewer          *_viewer;
    };

    #endif

Classes: QListWidget

As parent, the iviewer is passed and the pointer is stored in _iviewer. The forward declaration (class IViewer) is used to avoid dependency with the created header files. Dependencies to Qt/Qt Extended header files do not have to be handled.

File: listscreen.cpp

    #include "listscreen.h"
    #include "iviewer.h"
    ListScreen::ListScreen(IViewer *viewer)
    : QListWidget(viewer), _viewer(viewer)
    {
    }

The list widget is constructed and the _viewer is initialized. The project (qbuild.pro) should know about the new class. The following lines must be added to the qbuild.pro file:

File: qbuild.pro

    SOURCES += listscreen.cpp
    HEADERS += listscreen.h

Now, qbuild can be run again. The application should still display an empty screen. To see something useful, the screen in the iviewer has to be created and the list must be populated with some content. This will be the next step.

Top|Next

Publicité

Best Of

Actualités les plus lues

Semaine
Mois
Année
  1. Les développeurs détestent-ils les antivirus ? Un programmeur manifeste sa haine envers ces solutions de sécurité 24
  2. «Le projet de loi des droits du développeur» : quelles conditions doivent remplir les entreprises pour que le développeur puisse réussir ? 46
  3. Une nouvelle ère d'IHM 3D pour les automobiles, un concept proposé par Digia et implémenté avec Qt 3
  4. Qt Creator 2.5 est sorti en beta, l'EDI supporte maintenant plus de fonctionnalités de C++11 2
  5. PySide devient un add-on Qt et rejoint le Qt Project et le modèle d'open gouvernance 1
  6. Vingt sociétés montrent leurs décodeurs basés sur Qt au IPTV World Forum, en en exploitant diverses facettes (déclaratif, Web, widgets) 0
  7. Thread travailleur avec Qt en utilisant les signaux et les slots, un article de Christophe Dumez traduit par Thibaut Cuvelier 1
  1. « Quelque chose ne va vraiment pas avec les développeurs "modernes" », un développeur à "l'ancienne" critique la multiplication des bibliothèques 95
  2. Apercevoir la troisième dimension ou l'utilisation multithreadée d'OpenGL dans Qt, un article des Qt Quarterly traduit par Guillaume Belz 0
  3. Pourquoi les programmeurs sont-ils moins payés que les gestionnaires de programmes ? Manquent-ils de pouvoir de négociation ? 50
  4. Les développeurs détestent-ils les antivirus ? Un programmeur manifeste sa haine envers ces solutions de sécurité 24
  5. «Le projet de loi des droits du développeur» : quelles conditions doivent remplir les entreprises pour que le développeur puisse réussir ? 46
  6. Quelles nouveautés de C++11 Visual C++ doit-il rapidement intégrer ? Donnez-nous votre avis 10
  7. Qt Commercial : Digia organise un webinar gratuit le 27 mars sur la conception d'interfaces utilisateur et d'applications avec le framework 0
Page suivante

Le blog Digia au hasard

Logo

Déploiement d'applications Qt Commercial sur les tablettes Windows 8

Le blog Digia est l'endroit privilégié pour la communication sur l'édition commerciale de Qt, où des réponses publiques sont apportées aux questions les plus posées au support. Lire l'article.

Communauté

Ressources

Liens utiles

Contact

  • Vous souhaitez rejoindre la rédaction ou proposer un tutoriel, une traduction, une question... ? Postez dans le forum Contribuez ou contactez-nous par MP ou par email (voir en bas de page).

Qt dans le magazine

Cette page est une traduction d'une page de la documentation de Qt, écrite par Nokia Corporation and/or its subsidiary(-ies). Les éventuels problèmes résultant d'une mauvaise traduction ne sont pas imputables à Nokia. Qt qtextended4.4
Copyright © 2012 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon, vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Cette page est déposée à la SACD.
Vous avez déniché une erreur ? Un bug ? Une redirection cassée ? Ou tout autre problème, quel qu'il soit ? Ou bien vous désirez participer à ce projet de traduction ? N'hésitez pas à nous contacter ou par MP !
 
 
 
 
Partenaires

Hébergement Web