Sophie

Sophie

distrib > Mageia > 7 > i586 > by-pkgid > 1dd17e0d683ef79b4bb6872bbf359d7f > files > 7659

qt4-doc-4.8.7-26.2.mga7.noarch.rpm

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en_US" lang="en_US">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<!-- addressbook-fr.qdoc -->
  <title>Qt 4.8: Carnet d'adresses 2 - Ajouter des adresses</title>
  <link rel="stylesheet" type="text/css" href="style/style.css" />
  <script src="scripts/jquery.js" type="text/javascript"></script>
  <script src="scripts/functions.js" type="text/javascript"></script>
  <link rel="stylesheet" type="text/css" href="style/superfish.css" />
  <link rel="stylesheet" type="text/css" href="style/narrow.css" />
  <!--[if IE]>
<meta name="MSSmartTagsPreventParsing" content="true">
<meta http-equiv="imagetoolbar" content="no">
<![endif]-->
<!--[if lt IE 7]>
<link rel="stylesheet" type="text/css" href="style/style_ie6.css">
<![endif]-->
<!--[if IE 7]>
<link rel="stylesheet" type="text/css" href="style/style_ie7.css">
<![endif]-->
<!--[if IE 8]>
<link rel="stylesheet" type="text/css" href="style/style_ie8.css">
<![endif]-->

<script src="scripts/superfish.js" type="text/javascript"></script>
<script src="scripts/narrow.js" type="text/javascript"></script>

</head>
<body class="" onload="CheckEmptyAndLoadList();">
 <div class="header" id="qtdocheader">
    <div class="content"> 
    <div id="nav-logo">
      <a href="index.html">Home</a></div>
    <a href="index.html" class="qtref"><span>Qt Reference Documentation</span></a>
    <div id="narrowsearch"></div>
    <div id="nav-topright">
      <ul>
        <li class="nav-topright-home"><a href="http://qt.digia.com/">Qt HOME</a></li>
        <li class="nav-topright-dev"><a href="http://qt-project.org/">DEV</a></li>
        <li class="nav-topright-doc nav-topright-doc-active"><a href="http://qt-project.org/doc/">
          DOC</a></li>
        <li class="nav-topright-blog"><a href="http://blog.qt.digia.com/">BLOG</a></li>
      </ul>
    </div>
    <div id="shortCut">
      <ul>
        <li class="shortCut-topleft-inactive"><span><a href="index.html">Qt 4.8</a></span></li>
        <li class="shortCut-topleft-active"><a href="http://qt-project.org/doc/">ALL VERSIONS        </a></li>
      </ul>
     </div>
 <ul class="sf-menu" id="narrowmenu"> 
             <li><a href="#">API Lookup</a> 
                 <ul> 
                     <li><a href="classes.html">Class index</a></li> 
           <li><a href="functions.html">Function index</a></li> 
           <li><a href="modules.html">Modules</a></li> 
           <li><a href="namespaces.html">Namespaces</a></li> 
           <li><a href="qtglobal.html">Global Declarations</a></li> 
           <li><a href="qdeclarativeelements.html">QML elements</a></li> 
             </ul> 
             </li> 
             <li><a href="#">Qt Topics</a> 
                 <ul> 
                        <li><a href="qt-basic-concepts.html">Programming with Qt</a></li>  
                        <li><a href="qtquick.html">Device UIs &amp; Qt Quick</a></li>  
                        <li><a href="qt-gui-concepts.html">UI Design with Qt</a></li>  
                        <li><a href="supported-platforms.html">Supported Platforms</a></li>  
                        <li><a href="technology-apis.html">Qt and Key Technologies</a></li>  
                        <li><a href="best-practices.html">How-To's and Best Practices</a></li>  
              </ul> 
                 </li> 
                 <li><a href="#">Examples</a> 
                     <ul> 
                       <li><a href="all-examples.html">Examples</a></li> 
                       <li><a href="tutorials.html">Tutorials</a></li> 
                       <li><a href="demos.html">Demos</a></li> 
                       <li><a href="qdeclarativeexamples.html">QML Examples</a></li> 
                </ul> 
                     </li> 
                 </ul> 
    </div>
  </div>
  <div class="wrapper">
    <div class="hd">
      <span></span>
    </div>
    <div class="bd group">
      <div class="sidebar">
        <div class="searchlabel">
          Search index:</div>
        <div class="search" id="sidebarsearch">
          <form id="qtdocsearch" action="" onsubmit="return false;">
            <fieldset>
              <input type="text" name="searchstring" id="pageType" value="" />
 <div id="resultdialog"> 
 <a href="#" id="resultclose">Close</a> 
 <p id="resultlinks" class="all"><a href="#" id="showallresults">All</a> | <a href="#" id="showapiresults">API</a> | <a href="#" id="showarticleresults">Articles</a> | <a href="#" id="showexampleresults">Examples</a></p> 
 <p id="searchcount" class="all"><span id="resultcount"></span><span id="apicount"></span><span id="articlecount"></span><span id="examplecount"></span>&nbsp;results:</p> 
 <ul id="resultlist" class="all"> 
 </ul> 
 </div> 
            </fieldset>
          </form>
        </div>
        <div class="box first bottombar" id="lookup">
          <h2 title="API Lookup"><span></span>
            API Lookup</h2>
          <div  id="list001" class="list">
          <ul id="ul001" >
              <li class="defaultLink"><a href="classes.html">Class index</a></li>
              <li class="defaultLink"><a href="functions.html">Function index</a></li>
              <li class="defaultLink"><a href="modules.html">Modules</a></li>
              <li class="defaultLink"><a href="namespaces.html">Namespaces</a></li>
              <li class="defaultLink"><a href="qtglobal.html">Global Declarations</a></li>
              <li class="defaultLink"><a href="qdeclarativeelements.html">QML elements</a></li>
            </ul> 
          </div>
        </div>
        <div class="box bottombar" id="topics">
          <h2 title="Qt Topics"><span></span>
            Qt Topics</h2>
          <div id="list002" class="list">
            <ul id="ul002" >
               <li class="defaultLink"><a href="qt-basic-concepts.html">Programming with Qt</a></li> 
               <li class="defaultLink"><a href="qtquick.html">Device UIs &amp; Qt Quick</a></li> 
               <li class="defaultLink"><a href="qt-gui-concepts.html">UI Design with Qt</a></li> 
               <li class="defaultLink"><a href="supported-platforms.html">Supported Platforms</a></li>  
               <li class="defaultLink"><a href="technology-apis.html">Qt and Key Technologies</a></li> 
               <li class="defaultLink"><a href="best-practices.html">How-To's and Best Practices</a></li> 
            </ul>  
          </div>
        </div>
        <div class="box" id="examples">
          <h2 title="Examples"><span></span>
            Examples</h2>
          <div id="list003" class="list">
        <ul id="ul003">
              <li class="defaultLink"><a href="all-examples.html">Examples</a></li>
              <li class="defaultLink"><a href="tutorials.html">Tutorials</a></li>
              <li class="defaultLink"><a href="demos.html">Demos</a></li>
              <li class="defaultLink"><a href="qdeclarativeexamples.html">QML Examples</a></li>
            </ul> 
          </div>
        </div>
      </div>
      <div class="wrap">
        <div class="toolbar">
          <div class="breadcrumb toolblock">
            <ul>
              <li class="first"><a href="index.html">Home</a></li>
              <!--  Breadcrumbs go here -->
<li><a href="all-examples.html">Examples</a></li>
<li>Carnet d'adresses 2 - Ajouter des adresses</li>
            </ul>
          </div>
          <div class="toolbuttons toolblock">
            <ul>
              <li id="smallA" class="t_button">A</li>
              <li id="medA" class="t_button active">A</li>
              <li id="bigA" class="t_button">A</li>
              <li id="print" class="t_button"><a href="javascript:this.print();">
                <span>Print</span></a></li>
            </ul>
        </div>
        </div>
        <div class="content mainContent">
<div class="toc">
<h3><a name="toc">Contents</a></h3>
<ul>
<li class="level1"><a href="#d-finition-de-la-classe-addressbook">Définition de la classe AddressBook</a></li>
<li class="level1"><a href="#impl-mentation-de-la-classe-addressbook">Implémentation de la classe AddressBook</a></li>
</ul>
</div>
<h1 class="title">Carnet d'adresses 2 - Ajouter des adresses</h1>
<span class="subtitle"></span>
<!-- $$$tutorials/addressbook-fr/part2-description -->
<div class="descr"> <a name="details"></a>
<p>Files:</p>
<ul>
<li><a href="tutorials-addressbook-fr-part2-addressbook-cpp.html">tutorials/addressbook-fr/part2/addressbook.cpp</a></li>
<li><a href="tutorials-addressbook-fr-part2-addressbook-h.html">tutorials/addressbook-fr/part2/addressbook.h</a></li>
<li><a href="tutorials-addressbook-fr-part2-main-cpp.html">tutorials/addressbook-fr/part2/main.cpp</a></li>
<li><a href="tutorials-addressbook-fr-part2-part2-pro.html">tutorials/addressbook-fr/part2/part2.pro</a></li>
</ul>
<p>La prochaine étape pour créer notre carnet d'adresses est d'ajouter un soupçon d'interactivité.</p>
<p class="centerAlign"><img src="images/addressbook-tutorial-part2-add-contact.png" alt="" /></p><p>Nous allons fournir un bouton que l'utilisateur peut cliquer pour ajouter un nouveau contact. Une structure de données est aussi nécessaire afin de pouvoir stocker les contacts en mémoire.</p>
<a name="d-finition-de-la-classe-addressbook"></a>
<h2>Définition de la classe AddressBook</h2>
<p>Maintenant que nous avons mis en place les labels et les champs de saisie, nous ajoutons les boutons pour compléter le processus d'ajout d'un contact. Cela veut dire que notre fichier <tt>addressbook.h</tt> a maintenant trois objets <a href="qpushbutton.html">QPushButton</a> et trois slots publics correspondant.</p>
<pre class="cpp"> <span class="keyword">public</span> <span class="keyword">slots</span>:
     <span class="type">void</span> addContact();
     <span class="type">void</span> submitContact();
     <span class="type">void</span> cancel();</pre>
<p>Un slot est une méthode qui répond à un signal. Nous allons voir ce concept en détail lorsque nous implémenterons la classe <tt>AddressBook</tt>. Pour une explication détaillée du concept de signal et slot, vous pouvez vous référer au document <a href="signalsandslots.html#signals-and-slots">Signals and Slots</a>.</p>
<p>Les trois objets <a href="qpushbutton.html">QPushButton</a> <tt>addButton</tt>, <tt>submitButton</tt> et <tt>cancelButton</tt> sont maintenant inclus dans la déclaration des variables privées, avec <tt>nameLine</tt> et <tt>addressText</tt> du chapitre précédent.</p>
<pre class="cpp"> <span class="keyword">private</span>:
     <span class="type"><a href="qpushbutton.html">QPushButton</a></span> <span class="operator">*</span>addButton;
     <span class="type"><a href="qpushbutton.html">QPushButton</a></span> <span class="operator">*</span>submitButton;
     <span class="type"><a href="qpushbutton.html">QPushButton</a></span> <span class="operator">*</span>cancelButton;
     <span class="type"><a href="qlineedit.html">QLineEdit</a></span> <span class="operator">*</span>nameLine;
     <span class="type"><a href="qtextedit.html">QTextEdit</a></span> <span class="operator">*</span>addressText;</pre>
<p>Nous avons besoin d'un conteneur pour stocker les contacts du carnet d'adresses, de façon à pouvoir les énumérer et les afficher. Un objet <a href="qmap.html">QMap</a>, <tt>contacts</tt>, est utilisé pour ça, car il permet de stocker des paires clé-valeur: le nom du contact est la <i>clé</i> et l'adresse du contact est la <i>valeur</i>.</p>
<pre class="cpp">     <span class="type"><a href="qmap.html">QMap</a></span><span class="operator">&lt;</span><span class="type"><a href="qstring.html">QString</a></span><span class="operator">,</span> <span class="type"><a href="qstring.html">QString</a></span><span class="operator">&gt;</span> contacts;
     <span class="type"><a href="qstring.html">QString</a></span> oldName;
     <span class="type"><a href="qstring.html">QString</a></span> oldAddress;
 };</pre>
<p>Nous déclarons aussi deux objects <a href="qstring.html">QString</a> privés: <tt>oldName</tt> et <tt>oldAddress</tt>. Ces objets sont nécessaires pour conserver le nom et l'adresse du dernier contact affiché avant que l'utilisateur ne clique sur le bouton &quot;Add&quot;. Grâce à ces variables si l'utilisateur clique sur &quot;Cancel&quot;, il est possible de revenir à l'affichage du dernier contact.</p>
<a name="impl-mentation-de-la-classe-addressbook"></a>
<h2>Implémentation de la classe AddressBook</h2>
<p>Dans le constructeur de <tt>AddressBook</tt>, <tt>nameLine</tt> et <tt>addressText</tt> sont mis en mode lecture seule, de façon à autoriser l'affichage mais pas la modification du contact courant.</p>
<pre class="qml">     ...
     nameLine<span class="operator">-</span><span class="operator">&gt;</span>setReadOnly(<span class="keyword">true</span>);
     ...
     addressText<span class="operator">-</span><span class="operator">&gt;</span>setReadOnly(<span class="keyword">true</span>);</pre>
<p>Ensuite, nous instancions les boutons <tt>addButton</tt>, <tt>submitButton</tt>, et <tt>cancelButton</tt>.</p>
<pre class="cpp">     addButton <span class="operator">=</span> <span class="keyword">new</span> <span class="type"><a href="qpushbutton.html">QPushButton</a></span>(tr(<span class="string">&quot;&amp;Add&quot;</span>));
     addButton<span class="operator">-</span><span class="operator">&gt;</span>show();
     submitButton <span class="operator">=</span> <span class="keyword">new</span> <span class="type"><a href="qpushbutton.html">QPushButton</a></span>(tr(<span class="string">&quot;&amp;Submit&quot;</span>));
     submitButton<span class="operator">-</span><span class="operator">&gt;</span>hide();
     cancelButton <span class="operator">=</span> <span class="keyword">new</span> <span class="type"><a href="qpushbutton.html">QPushButton</a></span>(tr(<span class="string">&quot;&amp;Cancel&quot;</span>));
     cancelButton<span class="operator">-</span><span class="operator">&gt;</span>hide();</pre>
<p>Le bouton <tt>addButton</tt> est affiché en invoquant la méthode <a href="qwidget.html#show">show()</a>, tandis que <tt>submitButton</tt> et <tt>cancelButton</tt> sont cachés en invoquant <a href="qwidget.html#hide">hide()</a>. Ces deux boutons ne seront affichés que lorsque l'utilisateur cliquera sur &quot;Add&quot;, et ceci est géré par la méthode <tt>addContact()</tt> décrite plus loin.</p>
<pre class="cpp">     connect(addButton<span class="operator">,</span> SIGNAL(clicked())<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SLOT(addContact()));
     connect(submitButton<span class="operator">,</span> SIGNAL(clicked())<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SLOT(submitContact()));
     connect(cancelButton<span class="operator">,</span> SIGNAL(clicked())<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SLOT(cancel()));</pre>
<p>Nous connectons le signal <a href="qabstractbutton.html#clicked">clicked()</a> de chaque bouton au slot qui gèrera l'action. L'image ci-dessous illustre ceci:</p>
<p class="centerAlign"><img src="images/addressbook-tutorial-part2-signals-and-slots.png" alt="" /></p><p>Ensuite, nous arrangeons proprement les boutons sur la droite du widget AddressBook, et nous utilisons un <a href="qvboxlayout.html">QVBoxLayout</a> pour les aligner verticalement.</p>
<pre class="cpp">     <span class="type"><a href="qvboxlayout.html">QVBoxLayout</a></span> <span class="operator">*</span>buttonLayout1 <span class="operator">=</span> <span class="keyword">new</span> <span class="type"><a href="qvboxlayout.html">QVBoxLayout</a></span>;
     buttonLayout1<span class="operator">-</span><span class="operator">&gt;</span>addWidget(addButton<span class="operator">,</span> <span class="type"><a href="qt.html">Qt</a></span><span class="operator">::</span>AlignTop);
     buttonLayout1<span class="operator">-</span><span class="operator">&gt;</span>addWidget(submitButton);
     buttonLayout1<span class="operator">-</span><span class="operator">&gt;</span>addWidget(cancelButton);
     buttonLayout1<span class="operator">-</span><span class="operator">&gt;</span>addStretch();</pre>
<p>La methode <a href="qboxlayout.html#addStretch">addStretch()</a> est utilisée pour assurer que les boutons ne sont pas répartis uniformément, mais regroupés dans la partie supperieure du widget. La figure ci-dessous montre la différence si <a href="qboxlayout.html#addStretch">addStretch()</a> est utilisé ou pas.</p>
<p class="centerAlign"><img src="images/addressbook-tutorial-part2-stretch-effects.png" alt="" /></p><p>Ensuite nous ajoutons <tt>buttonLayout1</tt> à <tt>mainLayout</tt>, en utilisant <a href="qgridlayout.html#addLayout">addLayout()</a>. Ceci nous permet d'imbriquer les mises en page puisque <tt>buttonLayout1</tt> est maintenant un enfant de <tt>mainLayout</tt>.</p>
<pre class="cpp">     <span class="type"><a href="qgridlayout.html">QGridLayout</a></span> <span class="operator">*</span>mainLayout <span class="operator">=</span> <span class="keyword">new</span> <span class="type"><a href="qgridlayout.html">QGridLayout</a></span>;
     mainLayout<span class="operator">-</span><span class="operator">&gt;</span>addWidget(nameLabel<span class="operator">,</span> <span class="number">0</span><span class="operator">,</span> <span class="number">0</span>);
     mainLayout<span class="operator">-</span><span class="operator">&gt;</span>addWidget(nameLine<span class="operator">,</span> <span class="number">0</span><span class="operator">,</span> <span class="number">1</span>);
     mainLayout<span class="operator">-</span><span class="operator">&gt;</span>addWidget(addressLabel<span class="operator">,</span> <span class="number">1</span><span class="operator">,</span> <span class="number">0</span><span class="operator">,</span> <span class="type"><a href="qt.html">Qt</a></span><span class="operator">::</span>AlignTop);
     mainLayout<span class="operator">-</span><span class="operator">&gt;</span>addWidget(addressText<span class="operator">,</span> <span class="number">1</span><span class="operator">,</span> <span class="number">1</span>);
     mainLayout<span class="operator">-</span><span class="operator">&gt;</span>addLayout(buttonLayout1<span class="operator">,</span> <span class="number">1</span><span class="operator">,</span> <span class="number">2</span>);</pre>
<p>Les coordonnées du layout global ressemblent maintenant à ça:</p>
<p class="centerAlign"><img src="images/addressbook-tutorial-part2-labeled-layout.png" alt="" /></p><p>Dans la méthode <tt>addContact()</tt>, nous stockons les détails du dernier contact affiché dans <tt>oldName</tt> et <tt>oldAddress</tt>. Ensuite, nous vidons ces champs de saisie et nous désactivons le mode lecture seule. Le focus est placé sur <tt>nameLine</tt> et on affiche <tt>submitButton</tt> et <tt>cancelButton</tt>.</p>
<pre class="cpp"> <span class="type">void</span> AddressBook<span class="operator">::</span>addContact()
 {
     oldName <span class="operator">=</span> nameLine<span class="operator">-</span><span class="operator">&gt;</span>text();
     oldAddress <span class="operator">=</span> addressText<span class="operator">-</span><span class="operator">&gt;</span>toPlainText();

     nameLine<span class="operator">-</span><span class="operator">&gt;</span>clear();
     addressText<span class="operator">-</span><span class="operator">&gt;</span>clear();

     nameLine<span class="operator">-</span><span class="operator">&gt;</span>setReadOnly(<span class="keyword">false</span>);
     nameLine<span class="operator">-</span><span class="operator">&gt;</span>setFocus(<span class="type"><a href="qt.html">Qt</a></span><span class="operator">::</span>OtherFocusReason);
     addressText<span class="operator">-</span><span class="operator">&gt;</span>setReadOnly(<span class="keyword">false</span>);

     addButton<span class="operator">-</span><span class="operator">&gt;</span>setEnabled(<span class="keyword">false</span>);
     submitButton<span class="operator">-</span><span class="operator">&gt;</span>show();
     cancelButton<span class="operator">-</span><span class="operator">&gt;</span>show();
 }</pre>
<p>La méthode <tt>submitContact()</tt> peut être divisée en trois parties:</p>
<ol class="1">
<li>Nous extrayons les détails du contact depuis <tt>nameLine</tt> et <tt>addressText</tt> et les stockons dans des objets <a href="qstring.html">QString</a>. Nous les validons pour s'assurer que l'utilisateur n'a pas cliqué sur &quot;Add&quot; avec des champs de saisie vides; sinon un message est affiché avec <a href="qmessagebox.html">QMessageBox</a> pour rappeller à l'utilisateur que les deux champs doivent être complétés.<pre class="cpp"> <span class="type">void</span> AddressBook<span class="operator">::</span>submitContact()
 {
     <span class="type"><a href="qstring.html">QString</a></span> name <span class="operator">=</span> nameLine<span class="operator">-</span><span class="operator">&gt;</span>text();
     <span class="type"><a href="qstring.html">QString</a></span> address <span class="operator">=</span> addressText<span class="operator">-</span><span class="operator">&gt;</span>toPlainText();

     <span class="keyword">if</span> (name<span class="operator">.</span>isEmpty() <span class="operator">|</span><span class="operator">|</span> address<span class="operator">.</span>isEmpty()) {
         <span class="type"><a href="qmessagebox.html">QMessageBox</a></span><span class="operator">::</span>information(<span class="keyword">this</span><span class="operator">,</span> tr(<span class="string">&quot;Empty Field&quot;</span>)<span class="operator">,</span>
             tr(<span class="string">&quot;Please enter a name and address.&quot;</span>));
         <span class="keyword">return</span>;
     }</pre>
</li>
<li>Ensuite, nous vérifions si le contact existe déjà. Si aucun contacts existant n'entre en conflit avec le nouveau, nous l'ajoutons à <tt>contacts</tt> et nous affichons un <a href="qmessagebox.html">QMessageBox</a> pour informer l'utilisateur que le contact a été ajouté.<pre class="cpp">     <span class="keyword">if</span> (<span class="operator">!</span>contacts<span class="operator">.</span>contains(name)) {
         contacts<span class="operator">.</span>insert(name<span class="operator">,</span> address);
         <span class="type"><a href="qmessagebox.html">QMessageBox</a></span><span class="operator">::</span>information(<span class="keyword">this</span><span class="operator">,</span> tr(<span class="string">&quot;Add Successful&quot;</span>)<span class="operator">,</span>
             tr(<span class="string">&quot;\&quot;%1\&quot; has been added to your address book.&quot;</span>)<span class="operator">.</span>arg(name));
     } <span class="keyword">else</span> {
         <span class="type"><a href="qmessagebox.html">QMessageBox</a></span><span class="operator">::</span>information(<span class="keyword">this</span><span class="operator">,</span> tr(<span class="string">&quot;Add Unsuccessful&quot;</span>)<span class="operator">,</span>
             tr(<span class="string">&quot;Sorry, \&quot;%1\&quot; is already in your address book.&quot;</span>)<span class="operator">.</span>arg(name));
         <span class="keyword">return</span>;
     }</pre>
<p>Si le contact existe déjà, nous affichons un <a href="qmessagebox.html">QMessageBox</a> pour informer l'utilisateur du problème. Notre objet <tt>contacts</tt> est basé sur des paires clé-valeur formés par le nom et l'adresse, nous voulons nous assurer que la <i>clé</i> est unique.</p>
</li>
<li>Une fois que les deux vérifications précédentes ont été traitées, nous restaurons les boutons à leur état normal à l'aide du code suivant:<pre class="cpp">     <span class="keyword">if</span> (contacts<span class="operator">.</span>isEmpty()) {
         nameLine<span class="operator">-</span><span class="operator">&gt;</span>clear();
         addressText<span class="operator">-</span><span class="operator">&gt;</span>clear();
     }

     nameLine<span class="operator">-</span><span class="operator">&gt;</span>setReadOnly(<span class="keyword">true</span>);
     addressText<span class="operator">-</span><span class="operator">&gt;</span>setReadOnly(<span class="keyword">true</span>);
     addButton<span class="operator">-</span><span class="operator">&gt;</span>setEnabled(<span class="keyword">true</span>);
     submitButton<span class="operator">-</span><span class="operator">&gt;</span>hide();
     cancelButton<span class="operator">-</span><span class="operator">&gt;</span>hide();
 }</pre>
</li>
</ol>
<p>La capture d'écran ci-dessous montre l'affichage fournit par un objet <a href="qmessagebox.html">QMessageBox</a>, utilisé ici pour afficher un message d'information à l'utilisateur:</p>
<p class="centerAlign"><img src="images/addressbook-tutorial-part2-add-successful.png" alt="" /></p><p>La méthode <tt>cancel()</tt> restaure les détails du dernier contact, active <tt>addButton</tt>, et cache <tt>submitButton</tt> et <tt>cancelButton</tt>.</p>
<pre class="cpp"> <span class="type">void</span> AddressBook<span class="operator">::</span>cancel()
 {
     nameLine<span class="operator">-</span><span class="operator">&gt;</span>setText(oldName);
     nameLine<span class="operator">-</span><span class="operator">&gt;</span>setReadOnly(<span class="keyword">true</span>);

     addressText<span class="operator">-</span><span class="operator">&gt;</span>setText(oldAddress);
     addressText<span class="operator">-</span><span class="operator">&gt;</span>setReadOnly(<span class="keyword">true</span>);

     addButton<span class="operator">-</span><span class="operator">&gt;</span>setEnabled(<span class="keyword">true</span>);
     submitButton<span class="operator">-</span><span class="operator">&gt;</span>hide();
     cancelButton<span class="operator">-</span><span class="operator">&gt;</span>hide();
 }</pre>
<p>L'idée générale pour augmenter la flexibilité lors de l'ajout d'un contact est de donner la possiblité de cliquer sur &quot;Add&quot; ou &quot;Cancel&quot; à n'importe quel moment. L'organigramme ci-dessous reprend l'ensemble des interactions dévelopées jusqu'ici:</p>
<p class="centerAlign"><img src="images/addressbook-tutorial-part2-add-flowchart.png" alt="" /></p></div>
<!-- @@@tutorials/addressbook-fr/part2 -->
      </div>
    </div>
    </div> 
    <div class="ft">
      <span></span>
    </div>
  </div> 
  <div class="footer">
    <p>
      <acronym title="Copyright">&copy;</acronym> 2015 The Qt Company Ltd.
      Documentation contributions included herein are the copyrights of
      their respective owners.</p>
    <br />
    <p>
      The documentation provided herein is licensed under the terms of the
      <a href="http://www.gnu.org/licenses/fdl.html">GNU Free Documentation
      License version 1.3</a> as published by the Free Software Foundation.</p>
    <p>
      Documentation sources may be obtained from <a href="http://www.qt-project.org">
      www.qt-project.org</a>.</p>
    <br />
    <p>
      Qt and respective logos are trademarks of The Qt Company Ltd 
      in Finland and/or other countries worldwide. All other trademarks are property
      of their respective owners. <a title="Privacy Policy"
      href="http://en.gitorious.org/privacy_policy/">Privacy Policy</a></p>
  </div>

  <script src="scripts/functions.js" type="text/javascript"></script>
</body>
</html>