<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="http://doc.qtfr.org/feed/rss2/xslt" ?><rss version="2.0"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:wfw="http://wellformedweb.org/CommentAPI/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
  <title>Documentation Qtfr - designer</title>
  <link>http://doc.qtfr.org/</link>
  <description>La documentation francophone sur Qt</description>
  <language>fr</language>
  <pubDate>Thu, 03 Sep 2009 16:42:30 +0200</pubDate>
  <copyright></copyright>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Dotclear</generator>
  
    
  <item>
    <title>Utilisation du designer avec Qt4</title>
    <link>http://doc.qtfr.org/post/2007/04/01/Utilisation-du-designer</link>
    <guid isPermaLink="false">urn:md5:aa23d5c8b879d74148beac07811eecf6</guid>
    <pubDate>Wed, 04 Apr 2007 21:33:00 +0200</pubDate>
    <dc:creator>Nicolas</dc:creator>
        <category>Documentation</category>
        <category>designer</category><category>signaux-slots</category><category>version_Qt4</category>    
    <description>&lt;ul&gt;
&lt;li&gt;Comment intégrer un widget créé avec le designer&amp;nbsp;?&lt;/li&gt;
&lt;li&gt;Comment utiliser les fichiers .ui créés par le designer&amp;nbsp;?&lt;/li&gt;
&lt;li&gt;Quelle est la différence entre les trois méthodes d'intégration?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cet article va détailler l'utilisation du designer et l'intégration d'un widget créé avec le designer dans notre programme. Cet article est une &lt;em&gt;adaptation libre&lt;/em&gt; de la documentation de Qt&amp;nbsp;: &lt;a href=&quot;http://doc.trolltech.com/4.2/designer-using-a-component.html&quot; hreflang=&quot;en&quot;&gt;Using a Component in Your Application&lt;/a&gt;.&lt;/p&gt;


&lt;p&gt;&lt;strong&gt;Version&lt;/strong&gt;&amp;nbsp;: Qt4 (supérieur ou égal à Qt 4.1) &lt;br /&gt;
&lt;strong&gt;Auteur&lt;/strong&gt;&amp;nbsp;: Nicolas Arnaud-Cormos (&lt;a href=&quot;http://forum.qtfr.org/profile.php?id=7&quot;&gt;nikikko&lt;/a&gt;)&lt;br /&gt;
&lt;strong&gt;Test&lt;/strong&gt;&amp;nbsp;: Linux (Qt 4.2)&lt;/p&gt;    &lt;h3&gt;Introduction&lt;/h3&gt;


&lt;p&gt;Depuis Qt4, le designer a repris sa fonction première&amp;nbsp;: la création &lt;acronym title=&quot;What You See Is What You Get&quot;&gt;WYSIWYG&lt;/acronym&gt; de &lt;em&gt;forms&lt;/em&gt;(terme générique pour désigner soit une fenêtre principale, soit une boîte de dialogue, soit un widget personnalisé). L'utilisation du designer en lui-même et les différences entre ces &lt;em&gt;forms&lt;/em&gt; ne seront pas abordés ici.&lt;/p&gt;


&lt;p&gt;Une fois que l'utilisateur a créé une &lt;em&gt;form&lt;/em&gt; et l'enregistre sur le disque, il crée un fichier &lt;code&gt;.ui&lt;/code&gt; qui n'est autre qu'un fichier XML décrivant la &lt;em&gt;form&lt;/em&gt;&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;widgets qui composent la &lt;em&gt;form&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;organisation (layout) et position des différents widgets&lt;/li&gt;
&lt;li&gt;connexions entre les différents widgets&lt;/li&gt;
&lt;li&gt;...&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ce fichier &lt;code&gt;.ui&lt;/code&gt; n'est pas directement compilable&amp;nbsp;: pour être utilisé, il doit être converti en fichier C++ à l'aide de l'outil &lt;code&gt;uic&lt;/code&gt;. Avec l'utilisation combinée de &lt;code&gt;uic&lt;/code&gt; et de &lt;code&gt;qmake&lt;/code&gt;, le code C++ est généré automatiquement lors de la compilation de l'application.&lt;/p&gt;


&lt;p&gt;Il existe trois méthodes différentes pour intégrer les &lt;em&gt;forms&lt;/em&gt; créées avec le designer. Pour l'exemple, vous pouvez utiliser n'importe quelle &lt;em&gt;form&lt;/em&gt;, vous en trouverez une en annexe de cet article (qui s'appelle &lt;code&gt;mywidget.ui&lt;/code&gt;)&amp;nbsp;:&lt;/p&gt;


&lt;p&gt;&lt;img src=&quot;http://doc.qtfr.org/public/2007/designer-exemple.png&quot; alt=&quot;designer-exemple.png&quot; style=&quot;display:block; margin:0 auto;&quot; /&gt;&lt;/p&gt;


&lt;h4&gt;Fichier généré&lt;/h4&gt;

&lt;p&gt;Le fichier généré par &lt;code&gt;uic&lt;/code&gt; n'est pas un &lt;code&gt;QWidget&lt;/code&gt; (ou &lt;code&gt;QMainApplication&lt;/code&gt;/&lt;code&gt;QDialog&lt;/code&gt;), mais c'est juste une classe de description de l'interface contenant le code de création et d'organisation des widgets, ainsi que les connexions définies dans le designer.&lt;/p&gt;


&lt;p&gt;Par exemple, à partir du fichier &lt;code&gt;mywidget.ui&lt;/code&gt;&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;un fichier &lt;code&gt;ui_mywidget.h&lt;/code&gt; va être créé,&lt;/li&gt;
&lt;li&gt;ce fichier contient une classe dans le namespace &lt;strong&gt;Ui&lt;/strong&gt;&amp;nbsp;: &lt;code&gt;Ui::MyWidget&lt;/code&gt; (pour rappel, MyWidget est le nom que j'ai donné à la &lt;em&gt;form&lt;/em&gt; dans le designer),&lt;/li&gt;
&lt;li&gt;cette classe contient une fonction importante&amp;nbsp;: &lt;code&gt;void setupUi(QWidget *MyWidget)&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;&lt;a name=&quot;direct&quot;&gt;&lt;/a&gt; Méthode directe&lt;/h3&gt;


&lt;p&gt;La méthode directe est relativement simple&amp;nbsp;: un widget va être créé pour servir de conteneur à notre &lt;em&gt;form&lt;/em&gt;. Voici le .pro utilisé.&lt;/p&gt;
&lt;pre&gt;
TEMPLATE    = app
FORMS       = mywidget.ui
SOURCES     = main.cpp
&lt;/pre&gt;


&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;&amp;nbsp;: il ne faut pas indiquer le fichier créé par &lt;code&gt;uic&lt;/code&gt;, ici &lt;code&gt;ui_mywidget.h&lt;/code&gt;, ce dernier étant implicitement déclaré par le &lt;code&gt;FORMS&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;


&lt;p&gt;La fonction &lt;code&gt;main&lt;/code&gt; va créer un widget qui servira de conteneur à l'interface&amp;nbsp;: c'est la ligne &lt;code&gt;ui.setupUi(window);&lt;/code&gt;. Voici le fichier complet&amp;nbsp;:&lt;/p&gt;

&lt;pre class=&quot;cpp&quot;&gt;&lt;span style=&quot;color: #339900;&quot;&gt;#include &amp;lt;QApplication&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #339900;&quot;&gt;#include &amp;quot;ui_mywidget.h&amp;quot;&lt;/span&gt;
&amp;nbsp;
&lt;span style=&quot;color: #0000ff;&quot;&gt;int&lt;/span&gt; main&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;int&lt;/span&gt; argc, &lt;span style=&quot;color: #0000ff;&quot;&gt;char&lt;/span&gt; *argv&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;
&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#123;&lt;/span&gt;
    QApplication app&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;argc, argv&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;;
    QWidget *window = &lt;span style=&quot;color: #0000dd;&quot;&gt;new&lt;/span&gt; QWidget;
    Ui::&lt;span style=&quot;color: #00eeff;&quot;&gt;MyWidget&lt;/span&gt; ui;
    ui.&lt;span style=&quot;color: #00eeff;&quot;&gt;setupUi&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;window&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;;
&amp;nbsp;
    window-&amp;gt;show&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;;
    &lt;span style=&quot;color: #0000ff;&quot;&gt;return&lt;/span&gt; app.&lt;span style=&quot;color: #00eeff;&quot;&gt;exec&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;;
&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;


&lt;p&gt;Bien que rapide et simple d'utilisation, &lt;strong&gt;cette méthode est très limitée&lt;/strong&gt; car elle ne permet pas de définir des signaux et slots, de connecter des éléments entre eux... cette méthode est utile pour des fenêtres statiques, comme par exemple des fenêtres &lt;q&gt;A propos&lt;/q&gt;.&lt;/p&gt;



&lt;h3&gt;&lt;a name=&quot;simple&quot;&gt;&lt;/a&gt; Méthode héritage simple&lt;/h3&gt;


&lt;p&gt;Ici, plutôt que de créer un widget puis de lui appliquer une interface à l'aide de la fonction &lt;code&gt;setupUi&lt;/code&gt;, nous allons créer une classe qui hérite de &lt;code&gt;QWidget&lt;/code&gt; (ou &lt;code&gt;QDialog&lt;/code&gt;/&lt;code&gt;QMainWindow&lt;/code&gt;, en fonction du type de &lt;em&gt;form&lt;/em&gt; créée) et lui appliquer l'interface dans le constructeur&amp;nbsp;: une instance de la classe &lt;code&gt;Ui::MyWidget&lt;/code&gt; est déclarée comme membre de notre classe.&lt;/p&gt;

&lt;pre class=&quot;cpp&quot;&gt;&lt;span style=&quot;color: #339900;&quot;&gt;#include &amp;quot;ui_mywidget.h&amp;quot;&lt;/span&gt;
&lt;span style=&quot;color: #339900;&quot;&gt;#include &amp;lt;QWidget&amp;gt;&lt;/span&gt;
&amp;nbsp;
&lt;span style=&quot;color: #0000ff;&quot;&gt;class&lt;/span&gt; MyWidget : &lt;span style=&quot;color: #0000ff;&quot;&gt;public&lt;/span&gt; QWidget
&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#123;&lt;/span&gt;
    Q_OBJECT
&amp;nbsp;
&lt;span style=&quot;color: #0000ff;&quot;&gt;public&lt;/span&gt;:
    MyWidget&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;QWidget *parent = &lt;span style=&quot;color: #0000dd;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;;
...
&lt;span style=&quot;color: #0000ff;&quot;&gt;private&lt;/span&gt;:
    Ui::&lt;span style=&quot;color: #00eeff;&quot;&gt;MyWidget&lt;/span&gt; ui;
&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#125;&lt;/span&gt;;&lt;/pre&gt;


&lt;p&gt;Il est toujours nécessaire d'appeler la fonction &lt;code&gt;setupUi&lt;/code&gt;, mais cette fois-ci dans le constructeur de notre classe &lt;code&gt;MyWidget&lt;/code&gt;&amp;nbsp;:&lt;/p&gt;
&lt;pre class=&quot;cpp&quot;&gt;MyWidget::&lt;span style=&quot;color: #00eeff;&quot;&gt;MyWidget&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;QWidget *parent&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;
    : QWidget&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;parent&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;
&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#123;&lt;/span&gt;
    ui.&lt;span style=&quot;color: #00eeff;&quot;&gt;setupUi&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;;
&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;


&lt;p&gt;L'avantage ici, c'est que la déclaration de l'interface est un membre de la classe, les différents widgets ainsi que les layouts/signaux/méthodes sont donc directement accessible dans notre classe &lt;code&gt;MyWidget&lt;/code&gt;. Nous allons par exemple ajouter un slot &lt;code&gt;clickMe()&lt;/code&gt; qui sera connecté sur un clic sur le bouton &lt;q&gt;Cliquez moi !!&lt;/q&gt; (qui porte bien son nom)&amp;nbsp;:&lt;/p&gt;
&lt;pre class=&quot;cpp&quot;&gt;MyWidget::&lt;span style=&quot;color: #00eeff;&quot;&gt;MyWidget&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;QWidget *parent&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;
    : QWidget&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;parent&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;
&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#123;&lt;/span&gt;
    ui.&lt;span style=&quot;color: #00eeff;&quot;&gt;setupUi&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;;
    connect&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;ui.&lt;span style=&quot;color: #00eeff;&quot;&gt;pushButton&lt;/span&gt;, &lt;span style=&quot;color: #0000ff;&quot;&gt;SIGNAL&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;clicked&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;, &lt;span style=&quot;color: #0000dd;&quot;&gt;this&lt;/span&gt;, SLOT&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;clickMe&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;;
&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
&lt;span style=&quot;color: #0000ff;&quot;&gt;void&lt;/span&gt; MyWidget::&lt;span style=&quot;color: #00eeff;&quot;&gt;clickMe&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;
&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#123;&lt;/span&gt;
    ui.&lt;span style=&quot;color: #00eeff;&quot;&gt;lineEdit&lt;/span&gt;-&amp;gt;setText&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&amp;quot;YEAH !!!&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;;
&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;


&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;&amp;nbsp;: remarquez ici que tous les widgets qui composent la &lt;em&gt;form&lt;/em&gt; sont appelés à l'aide du membre &lt;strong&gt;ui&lt;/strong&gt;.&lt;/p&gt;&lt;/blockquote&gt;


&lt;p&gt;Cette méthode offre de &lt;strong&gt;nombreux avantages&lt;/strong&gt; au développeur&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;accès aux différents widgets de la &lt;em&gt;form&lt;/em&gt;,&lt;/li&gt;
&lt;li&gt;encapsulation de l'interface dans un widget facilement utilisable,&lt;/li&gt;
&lt;li&gt;possibilité d'utiliser plusieurs interfaces...&lt;/li&gt;
&lt;/ul&gt;


&lt;h4&gt;A propos des noms&lt;/h4&gt;

&lt;p&gt;Comme vous l'avez remarqué, j'ai employé le même nom partout&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;3 fichiers&amp;nbsp;: &lt;code&gt;mywidget.ui&lt;/code&gt;, &lt;code&gt;mywidget.h&lt;/code&gt; et &lt;code&gt;mywidget.cpp&lt;/code&gt;,&lt;/li&gt;
&lt;li&gt;dans le designer, l'interface s'appelle &lt;code&gt;MyWidget&lt;/code&gt; et lors de la compilation, la classe &lt;code&gt;Ui::MyWidget&lt;/code&gt; est créée,&lt;/li&gt;
&lt;li&gt;la classe dérivée s'appelle aussi &lt;code&gt;MyWidget&lt;/code&gt; (pas de problème de nommage, la classe précédente étant dans un namespace).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;C'est une préférence personnelle, mais &lt;em&gt;il est tout à fait possible d'utiliser des noms différents entre l'interface  et la classe dérivée&lt;/em&gt;. On peut par exemple imaginer deux classes différentes qui partagent la même interface.&lt;/p&gt;



&lt;h4&gt;Compilation&lt;/h4&gt;

&lt;p&gt;Il est nécessaire de modifier notre fichier .pro utilisé pour la compilation, en ajoutant la classe créée&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
TEMPLATE    = app
FORMS       = mywidget.ui
SOURCES     = main.cpp \
              mywidget.cpp
HEADERS     = mywidget.h
&lt;/pre&gt;


&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;&amp;nbsp;: il ne faut pas indiquer le fichier créé par &lt;code&gt;uic&lt;/code&gt;, ici &lt;code&gt;ui_mywidget.h&lt;/code&gt;, ce dernier étant implicitement déclaré par le &lt;code&gt;FORMS&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;



&lt;h3&gt;&lt;a name=&quot;multiple&quot;&gt;&lt;/a&gt; Méthode héritage multiple&lt;/h3&gt;


&lt;p&gt;Cette méthode est très proche de la méthode précédente (les notes sur le choix des noms et sur la compilation sont toujours valables), la différence étant que l'interface n'est plus un membre de la classe héritée, mais elle est aussi héritée par le widget&amp;nbsp;:&lt;/p&gt;
&lt;pre class=&quot;cpp&quot;&gt;&lt;span style=&quot;color: #339900;&quot;&gt;#include &amp;quot;ui_mywidget.h&amp;quot;&lt;/span&gt;
&lt;span style=&quot;color: #339900;&quot;&gt;#include &amp;lt;QWidget&amp;gt;&lt;/span&gt;
&amp;nbsp;
&lt;span style=&quot;color: #0000ff;&quot;&gt;class&lt;/span&gt; MyWidget : &lt;span style=&quot;color: #0000ff;&quot;&gt;public&lt;/span&gt; QWidget, &lt;span style=&quot;color: #0000ff;&quot;&gt;private&lt;/span&gt; Ui::&lt;span style=&quot;color: #00eeff;&quot;&gt;MyWidget&lt;/span&gt;
&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#123;&lt;/span&gt;
    Q_OBJECT
&amp;nbsp;
&lt;span style=&quot;color: #0000ff;&quot;&gt;public&lt;/span&gt;:
    MyWidget&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;QWidget *parent = &lt;span style=&quot;color: #0000dd;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;;
&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#125;&lt;/span&gt;;&lt;/pre&gt;


&lt;p&gt;Nous avons effectué un héritage privé, pour ne pas exposer l'interface dans les éventuelles sous-classes de notre classe. Mais nous pourrions très bien faire un héritage protégé ou publique afin qu'elle soit accessible.&lt;/p&gt;


&lt;p&gt;Là encore, il est nécessaire d'appeler la méthode &lt;code&gt;setupUi&lt;/code&gt;, mais les méthodes et les widgets sont directement accessibles dans le code du widget (il n'est plus nécessaire d'utiliser &lt;strong&gt;ui&lt;/strong&gt;)&amp;nbsp;:&lt;/p&gt;
&lt;pre class=&quot;cpp&quot;&gt;MyWidget::&lt;span style=&quot;color: #00eeff;&quot;&gt;MyWidget&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;QWidget *parent&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;
    : QWidget&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;parent&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;
&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#123;&lt;/span&gt;
    setupUi&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;;
&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;


&lt;p&gt;Personnellement, c'est ma méthode préférée&amp;nbsp;: elle offre une &lt;strong&gt;meilleure lisibilité du code&lt;/strong&gt;, par contre il n'est plus possible de modifier l'interface (mais était-ce vraiment un problème ?).&lt;/p&gt;



&lt;h3&gt;Connexions automatiques&lt;/h3&gt;


&lt;p&gt;Depuis Qt4, il n'est plus possible de créer des slots directement dans le designer et de les connecter graphiquement... il est donc nécessaire de définir la connexion dans le constructeur (comme nous l'avons fait pour la &lt;a href=&quot;http://doc.qtfr.org/post/2007/04/01/#simple&quot;&gt;méthode héritage simple&lt;/a&gt;). Mais il est possible de définir des connexions automatiques avec des noms de slots utilisant une certaine convention&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt; on_&amp;lt;nom du widget&amp;gt;_&amp;lt;nom du signal&amp;gt;(&amp;lt;paramètres du signal&amp;gt;);&lt;/pre&gt;


&lt;p&gt;Lors de la compilation de la &lt;em&gt;form&lt;/em&gt; par &lt;code&gt;uic&lt;/code&gt;, il génère le code nécessaire à la création automatique des connexions. Dans notre exemple, nous aurions pu utiliser le slot suivant&amp;nbsp;:&lt;/p&gt;
&lt;pre class=&quot;cpp&quot;&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;void&lt;/span&gt; MyWidget::&lt;span style=&quot;color: #00eeff;&quot;&gt;on_pushButton_clicked&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;
&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#123;&lt;/span&gt;
    ui.&lt;span style=&quot;color: #00eeff;&quot;&gt;lineEdit&lt;/span&gt;-&amp;gt;setText&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&amp;quot;YEAH !!!&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;;
&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;</description>
    
          <enclosure url="http://doc.qtfr.org/public/2007/designer.tar.gz"
      length="1483" type="application/x-gzip" />
    
    
      </item>
    
  <item>
    <title>Utilisation du designer avec PyQt4</title>
    <link>http://doc.qtfr.org/post/2007/03/30/Utilisation-du-designer-avec-PyQt4</link>
    <guid isPermaLink="false">urn:md5:2bb55125ec6435107c6eab7fe948c3f2</guid>
    <pubDate>Fri, 30 Mar 2007 21:03:00 +0200</pubDate>
    <dc:creator>Visiteur</dc:creator>
        <category>Documentation</category>
        <category>designer</category><category>version_PyQt4</category>    
    <description>&lt;ul&gt;
&lt;li&gt;Comment utiliser le designer avec PyQt4&amp;nbsp;?&lt;/li&gt;
&lt;li&gt;Comment intégrer les widgets créer avec le designer dans un programme python&amp;nbsp;?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cet article va détailler l'intégration d'un widget créer avec le designer Qt dans un programme python, en utilisant le binding python de &lt;a href=&quot;http://www.riverbankcomputing.co.uk/pyqt/&quot; hreflang=&quot;en&quot;&gt;PyQt&lt;/a&gt; de Riverbank. Il va aussi détailler l'utilisation de &lt;code&gt;pyuic&lt;/code&gt;, qui permet de générer le code python à partir des fichiers créés par le designer.&lt;/p&gt;


&lt;p&gt;&lt;strong&gt;Auteur&lt;/strong&gt;&amp;nbsp;: Kib² (&lt;a href=&quot;http://forum.qtfr.org/profile.php?id=428&quot;&gt;tool69&lt;/a&gt;) &lt;br /&gt;
&lt;strong&gt;Version&lt;/strong&gt;&amp;nbsp;: PyQt4 (&lt;a href=&quot;http://www.riverbankcomputing.co.uk/pyqt/&quot; hreflang=&quot;en&quot;&gt;Riverbank&lt;/a&gt;)&lt;/p&gt;    &lt;p&gt;L'article est disponible sur le site de &lt;strong&gt;Kib²&lt;/strong&gt;&amp;nbsp;: &lt;a href=&quot;http://kib2.webfactional.com/blog/2006/nov/11/comment-utiliser-qtdesigner-avec-pyqt4/&quot; title=&quot;http://kib2.webfactional.com/blog/2006/nov/11/comment-utiliser-qtdesigner-avec-pyqt4/&quot;&gt;http://kib2.webfactional.com/blog/2...&lt;/a&gt;.&lt;/p&gt;


&lt;blockquote&gt;&lt;p&gt;Si jamais vous avez déjà programmé en Python avec la bibliothèque d'origine TkInter, vous savez déjà que coder une interface utilisateur à la main est une tâche à la fois longue et fastidieuse.&lt;/p&gt;
&lt;p&gt;
QtDesigner est l'outil fourni par la bibliothèque Qt qui vous permet de réaliser une GUI (en Français une IHM&amp;nbsp;: Interface Homme-Machine), par le biais d'un système de glisser-déposer. Il est ainsi possible de créer trois types de «&amp;nbsp;formes&amp;nbsp;» : des widgets, des dialogues ou des applications, tout ceci vous étant demandé par QtDesigner lors de création d'une nouvelle «&amp;nbsp;form&amp;nbsp;» (à partir du menu, choisir File/New Form).&lt;/p&gt;
&lt;p&gt;
QtDesigner ne génère pas de code source directement. Il peut uniquement sauvegarder votre «&amp;nbsp;forme&amp;nbsp;» avec l'extension «&amp;nbsp;.ui », un dérivé du format XML. Il vous est alors possible, grâce à un module nommé «&amp;nbsp;uic&amp;nbsp;» (lui même écrit en Python) de générer le code Python à l'interface que vous avez précédemment déssiné. C'est à la fois un gain de temps et de productivité, mais aussi une bonne façon de séparer le fond de la forme de votre interface.&lt;/p&gt;
&lt;p&gt;
C'est l'utilitaire en ligne de commande nommé «&amp;nbsp;pyuic4&amp;nbsp;» qui vous permettra de manipuler le module «&amp;nbsp;uic », il sera détaillé un peu plus loin.&lt;/p&gt;&lt;/blockquote&gt;


&lt;p&gt;Il est aussi disponible en &lt;strong&gt;libre téléchargement&lt;/strong&gt; en annexe au format PDF et html.&lt;/p&gt;</description>
    
          <enclosure url="http://doc.qtfr.org/public/2007/pyqt4-designer.html"
      length="62999" type="text/html" />
          <enclosure url="http://doc.qtfr.org/public/2007/pyqt4-designer.pdf"
      length="122852" type="application/pdf" />
    
    
      </item>
    
</channel>
</rss>