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  · 

QML Documents

A QML document is a block of QML source code. QML documents generally correspond to files stored on a disk or at a location on a network, but they can also be constructed directly from text data.

Here is a simple QML document:

 import QtQuick 1.0

 Rectangle {
     width: 240; height: 320;

     resources: [
         Component {
             id: contactDelegate
             Text {
                 text: modelData.firstName + " " + modelData.lastName
             }
         }
     ]

     ListView {
         anchors.fill: parent
         model: contactModel
         delegate: contactDelegate
     }
 }

QML documents are always encoded in UTF-8 format.

A QML document always begins with one or more import statements. To prevent elements introduced in later versions from affecting existing QML programs, the element types available within a document are controlled by the imported QML Modules. That is, QML is a versioned language.

Syntactically a QML document is self contained; QML does not have a preprocessor that modifies the document prior to presentation to the QML runtime. import statements do not "include" code in the document, but instead instruct the QML runtime on how to resolve type references found in the document. Any type reference present in a QML document - such as Rectangle and ListView - including those made within an JavaScript block or Property Bindings, are resolved based exclusively on the import statements. QML does not import any modules by default, so at least one import statement must be present or no elements will be available!

Each id value in a QML document must be unique within that document. They do not need to be unique across different documents as id values are resolved according to the document scope.

Documents as Component Definitions

A QML document defines a single, top-level QML component. A QML component is a template that is interpreted by the QML runtime to create an object with some predefined behaviour. As it is a template, a single QML component can be "run" multiple times to produce several objects, each of which are said to be instances of the component.

Once created, instances are not dependent on the component that created them, so they can operate on independent data. Here is an example of a simple "Button" component (defined in a Button.qml file) that is instantiated four times by application.qml. Each instance is created with a different value for its text property:

Button.qmlapplication.qml
 import QtQuick 1.0

 Rectangle {
     property alias text: textItem.text

     width: 100; height: 30
     border.width: 1
     radius: 5
     smooth: true

     gradient: Gradient {
         GradientStop { position: 0.0; color: "darkGray" }
         GradientStop { position: 0.5; color: "black" }
         GradientStop { position: 1.0; color: "darkGray" }
     }

     Text {
         id: textItem
         anchors.centerIn: parent
         font.pointSize: 20
         color: "white"
     }

 }
 import QtQuick 1.0

 Column {
     spacing: 10

     Button { text: "Apple" }
     Button { text: "Orange" }
     Button { text: "Pear" }
     Button { text: "Grape" }
 }

Any snippet of QML code can become a component, just by placing it in the file "<Name>.qml" where <Name> is the new element name, and begins with an uppercase letter. Note that the case of all characters in the <Name> are significant on some filesystems, notably UNIX filesystems. It is recommended that the case of the filename matches the case of the component name in QML exactly, regardless of the platform the QML will be deployed to.

These QML component files automatically become available as new QML element types to other QML components and applications in the same directory.

Inline Components

In addition to the top-level component that all QML documents define, and any reusable components placed in separate files, documents may also include inline components. Inline components are declared using the Component element, as can be seen in the first example above. Inline components share all the characteristics of regular top-level components and use the same import list as their containing QML document. Components are one of the most basic building blocks in QML, and are frequently used as "factories" by other elements. For example, the ListView element uses the delegate component as the template for instantiating list items - each list item is just a new instance of the component with the item specific data set appropriately.

Like other QML Elements, the Component element is an object and must be assigned to a property. Component objects may also have an object id. In the first example on this page, the inline component is added to the Rectangle's resources list, and then Property Binding is used to assign the Component to the ListView's delegate property. While using property binding allows the Component object to be shared (for example, if the QML document contained multiple ListView's with the same delegate), in this case the Component could have been assigned directly to the ListView's delegate. The QML language even contains a syntactic optimization when assigning directly to a component property for this case where it will automatically insert the Component tag.

These final two examples are behaviorally identical to the original document.

 import QtQuick 1.0

 Rectangle {
     width: 240; height: 320;

     ListView {
         anchors.fill: parent
         model: contactModel
         delegate: Component {
             Text {
                 text: modelData.firstName + " " + modelData.lastName
             }
         }
     }
 }
 import QtQuick 1.0

 Rectangle {
     width: 240; height: 320;

     ListView {
         anchors.fill: parent
         model: contactModel
         delegate: Text {
             text: modelData.firstName + " " + modelData.lastName
         }
     }
 }

See also QDeclarativeComponent.

Publicité

Best Of

Actualités les plus lues

Semaine
Mois
Année
  1. « Quelque chose ne va vraiment pas avec les développeurs "modernes" », un développeur à "l'ancienne" critique la multiplication des bibliothèques 103
  2. Pourquoi les programmeurs sont-ils moins payés que les gestionnaires de programmes ? Manquent-ils de pouvoir de négociation ? 56
  3. «Le projet de loi des droits du développeur» : quelles conditions doivent remplir les entreprises pour que le développeur puisse réussir ? 90
  4. Les développeurs détestent-ils les antivirus ? Un programmeur manifeste sa haine envers ces solutions de sécurité 31
  5. Qt Commercial : Digia organise un webinar gratuit le 27 mars sur la conception d'interfaces utilisateur et d'applications avec le framework 0
  6. Quelles nouveautés de C++11 Visual C++ doit-il rapidement intégrer ? Donnez-nous votre avis 10
  7. 2017 : un quinquennat pour une nouvelle version du C++ ? Possible, selon Herb Sutter 11
Page suivante
  1. Linus Torvalds : le "C++ est un langage horrible", en justifiant le choix du C pour le système de gestion de version Git 100
  2. Comment prendre en compte l'utilisateur dans vos applications ? Pour un développeur, « 90 % des utilisateurs sont des idiots » 231
  3. Quel est LE livre que tout développeur doit lire absolument ? Celui qui vous a le plus marqué et inspiré 96
  4. Apple cède et s'engage à payer des droits à Nokia, le conflit des brevets entre les deux firmes s'achève 158
  5. Nokia porte à nouveau plainte contre Apple pour violation de sept nouveaux brevets 158
  6. « Quelque chose ne va vraiment pas avec les développeurs "modernes" », un développeur à "l'ancienne" critique la multiplication des bibliothèques 103
  7. Quel est le code dont vous êtes le plus fier ? Pourquoi l'avez-vous écrit ? Et pourquoi vous a-t-il donné autant de satisfaction ? 83
Page suivante

Le Qt Developer Network au hasard

Logo

Comment fermer une application

Le Qt Developer Network est un réseau de développeurs Qt anglophone, où ils peuvent partager leur expérience sur le framework. 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 4.7-snapshot
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