<?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 - Documentation</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 de PyQt avec Qt 4.4</title>
    <link>http://doc.qtfr.org/post/2008/05/01/Utilisation-de-PyQt-avec-Qt-44</link>
    <guid isPermaLink="false">urn:md5:0e18e4ab0dd062e5d371fd6f4a996b52</guid>
    <pubDate>Thu, 01 May 2008 15:14:00 +0200</pubDate>
    <dc:creator>Visiteur</dc:creator>
        <category>Documentation</category>
        <category>installation</category><category>Linux</category><category>version_PyQt4</category><category>version_Qt4</category>    
    <description>&lt;p&gt;Tool69 vous propose, étape par étape, d'utiliser PyQt avec Qt4.4 RC1.&lt;/p&gt;


&lt;p&gt;&lt;strong&gt;Version&lt;/strong&gt;&amp;nbsp;: Qt4/PyQt4 &lt;br /&gt;
&lt;strong&gt;Auteur&lt;/strong&gt;&amp;nbsp;: &lt;a href=&quot;http://forum.qtfr.org/profile.php?id=428&quot;&gt;Tool69&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;Le document est disponible en 2 formats:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Voir la &lt;a href=&quot;http://kib2.free.fr/Articles/Installation_d%C3%A9taill%C3%A9e_de_PyQt4.4.html&quot;&gt;page sur le blog de l'auteur&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;libre téléchargement en PDF&amp;nbsp;: &lt;a href=&quot;http://doc.qtfr.org/public/2008/Install_Qt44.pdf&quot;&gt;téléchargez&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;</description>
    
          <enclosure url="http://doc.qtfr.org/public/2008/Install_Qt44.pdf"
      length="63431" type="application/pdf" />
    
    
      </item>
    
  <item>
    <title>Au secours, mes slots ne fonctionnent pas</title>
    <link>http://doc.qtfr.org/post/2007/06/22/Au-secours-mes-slots-ne-fonctionnent-pas</link>
    <guid isPermaLink="false">urn:md5:ab8780c16e8985d80d33b375582dcfcb</guid>
    <pubDate>Fri, 22 Jun 2007 22:20:00 +0200</pubDate>
    <dc:creator>lud42fr</dc:creator>
        <category>Documentation</category>
        <category>signaux-slots</category>    
    <description>&lt;p&gt;Une liste de points à appliquer pour réussir ses connexions entre signaux et slots.&lt;/p&gt;


&lt;p&gt;&lt;strong&gt;Version&lt;/strong&gt;&amp;nbsp;: Qt3, Qt4 &lt;br /&gt;
&lt;strong&gt;Auteur&lt;/strong&gt;&amp;nbsp;: Ludo (&lt;a href=&quot;http://forum.qtfr.org/profile.php?id=1041&quot;&gt;lud42fr&lt;/a&gt;)&lt;br /&gt;&lt;/p&gt;    &lt;h2&gt;Don't panic&lt;/h2&gt;


&lt;h3&gt;Premier diagnostic:&lt;/h3&gt;


&lt;p&gt;Lorsque qu'un slot n'est pas appelé, il y a trois solutions&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Je n'ai pas lu la &lt;a href=&quot;http://doc.trolltech.com/4.3/signalsandslots.html&quot; hreflang=&quot;fr&quot;&gt;doc&lt;/a&gt; et je le regrette&lt;/li&gt;
&lt;li&gt;Le signal n'est pas émis et ce document est trop général pour répondre à ce cas&amp;nbsp;!&lt;/li&gt;
&lt;li&gt;Le slot est mal connecté et le chapitre suivant décrit les bons réflexes&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Premiers réflexes:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Rester détendu&lt;/li&gt;
&lt;li&gt;Vérifier sur la console les messages d'erreur&lt;/li&gt;
&lt;li&gt;Vérifier que la classe débute par la macro Q_OBJECT&lt;/li&gt;
&lt;li&gt;Vérifier, en cas d'héritage multiple, que la première classe héritée est un descendant de QObject&lt;/li&gt;
&lt;li&gt;Vérifier la syntaxe de la connexion&lt;/li&gt;
&lt;li&gt;Vérifier que les signatures sont correctes&lt;/li&gt;
&lt;li&gt;Vérifier que la signature du signal est la &lt;strong&gt;même&lt;/strong&gt; que celle du slot&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;L'action au ralenti&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Mettre un grand coup de latte&lt;/strong&gt; dans l'UC, ça ne corrige pas le problème, mais ça permet de l'aborder détendu.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vérifier sur la console&lt;/strong&gt; (voir activer la console en annexe A), &lt;strong&gt;que Qt ne signale pas une ou plusieurs erreurs&lt;/strong&gt; concernant la connexion à l'exécution (les erreurs de connexion n'apparaissent qu'a l'exécution)&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;&lt;p&gt;Les messages peuvent prendre plusieurs formes et tenir sur plusieurs lignes, mais ont tous en commun, le fait de débuter par &lt;strong&gt;Object::connect:&lt;/strong&gt;
Par exemple l'affichage pour une seule connexion défaillante:&lt;/p&gt;&lt;/blockquote&gt;
&lt;pre class=&quot;cpp&quot;&gt;Object::&lt;span style=&quot;color: #00eeff;&quot;&gt;connect&lt;/span&gt;: Parentheses expected, slot MainWindow::&lt;span style=&quot;color: #666666;&quot;&gt;''&lt;/span&gt;
   Object::&lt;span style=&quot;color: #00eeff;&quot;&gt;connect&lt;/span&gt;:  &lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;sender name:   &lt;span style=&quot;color: #666666;&quot;&gt;'test'&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #666666;&quot;&gt;''&lt;/span&gt;
   Object::&lt;span style=&quot;color: #00eeff;&quot;&gt;connect&lt;/span&gt;:  &lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;receiver name: &lt;span style=&quot;color: #666666;&quot;&gt;'WindowMain'&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Vérifier que la classe débute par la macro Q_OBJECT&lt;/strong&gt;&amp;nbsp;:&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;&lt;p&gt;La classe qui contient le slot (ou le signal d'ailleurs) doit débuter par la macro Q_OBJECT.
Ce mot clé est repéré par le meta-object-compiler (moc) et permet de générer le code nécessaire à la recherche et à l'identification des slots, code qui sera utilisé par la méthode connect.
Ex:&lt;/p&gt;&lt;/blockquote&gt;
&lt;pre class=&quot;cpp&quot;&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;class&lt;/span&gt; maClasse : &lt;span style=&quot;color: #0000ff;&quot;&gt;public&lt;/span&gt; QObject
   &lt;span style=&quot;color: #000000;&quot;&gt;&amp;#123;&lt;/span&gt;
    Q_OBJECT
    &lt;span style=&quot;color: #0000ff;&quot;&gt;public&lt;/span&gt;:
   &lt;span style=&quot;color: #000000;&quot;&gt;&amp;#125;&lt;/span&gt;;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Vérifier, en cas d'héritage multiple, que la première classe héritée est un descendant de QObject&lt;/strong&gt;&amp;nbsp;:&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;&lt;p&gt;Erreur classique lorsqu'on utilise une interface (classe abstraite, n'héritant pas de QObject), elle est difficile à trouver. Pour l'éviter, il suffit de prendre l'habitude de toujours mettre la classe descendant de QObject en premier.
Par exemple, ceci donnera une erreur&amp;nbsp;:&lt;/p&gt;&lt;/blockquote&gt;
&lt;pre class=&quot;cpp&quot;&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;class&lt;/span&gt; maClasse : &lt;span style=&quot;color: #0000ff;&quot;&gt;public&lt;/span&gt; MonInterface, &lt;span style=&quot;color: #0000ff;&quot;&gt;public&lt;/span&gt; QObject
   &lt;span style=&quot;color: #000000;&quot;&gt;&amp;#123;&lt;/span&gt;
    Q_OBJECT
    ...
   &lt;span style=&quot;color: #000000;&quot;&gt;&amp;#125;&lt;/span&gt;;&lt;/pre&gt;

&lt;blockquote&gt;&lt;p&gt;Il suffit alors de changer l'ordre d'héritage pour que ça marche:&lt;/p&gt;&lt;/blockquote&gt;
&lt;pre class=&quot;cpp&quot;&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;class&lt;/span&gt; maClasse : &lt;span style=&quot;color: #0000ff;&quot;&gt;public&lt;/span&gt; QObject, &lt;span style=&quot;color: #0000ff;&quot;&gt;public&lt;/span&gt; MonInterface
   &lt;span style=&quot;color: #000000;&quot;&gt;&amp;#123;&lt;/span&gt;
    Q_OBJECT
    ...
   &lt;span style=&quot;color: #000000;&quot;&gt;&amp;#125;&lt;/span&gt;;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Vérifier dans le code, que la syntaxe de la connexion est correcte&lt;/strong&gt;&amp;nbsp;:&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;&lt;p&gt;pour cela on rappelle la méthode connect (la plus courante) :&lt;br /&gt;
&lt;em&gt;connect(pointeur_sur_l_objet_emetteur, SIGNAL(signature_du_signal),pointeur_sur_l_objet_receveur, SLOT(signature_du_slot));&lt;/em&gt;&lt;br /&gt;
A noter qu'il est possible de connecter un signal à un autre signal, le principe reste le même :&lt;br /&gt;
&lt;em&gt;connect(pointeur_sur_l_objet_emetteur, SIGNAL(signature_du_signal_emetteur),pointeur_sur_l_objet_receveur,SIGNAL(signature_du_signal_receveur));&lt;/em&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;
Passons &lt;em&gt;pointeur_sur_l_objet_emetteur&lt;/em&gt; et  &lt;em&gt;pointeur_sur_l_objet_receveur&lt;/em&gt;, trivial
Par contre attardons nous sur la &lt;strong&gt;signature d'une méthode&lt;/strong&gt;&amp;nbsp;:
par exemple&amp;nbsp;:&lt;/p&gt;&lt;/blockquote&gt;
&lt;pre class=&quot;cpp&quot;&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;class&lt;/span&gt; maclasse
    &lt;span style=&quot;color: #000000;&quot;&gt;&amp;#123;&lt;/span&gt;
       &lt;span style=&quot;color: #0000ff;&quot;&gt;void&lt;/span&gt; ma_methode&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; argument1,&lt;span style=&quot;color: #0000ff;&quot;&gt;char&lt;/span&gt;* argument2&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;la signature de  ma_methode est&amp;nbsp;: &lt;strong&gt;ma_methode (int,char*)&lt;/strong&gt;&lt;br /&gt;
Si on généralise une signature de méthode c'est&amp;nbsp;:
&lt;strong&gt;le_nom_de_la_methode ( le_type_de arg1,...,le_type_de_argN)&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Vérifier que les signatures sont correctes&lt;/strong&gt; (ça s'appelle enfoncer le clou !)&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;&lt;p&gt;Donc on ne met &lt;strong&gt;pas le nom des arguments&lt;/strong&gt;, juste leur type&lt;/p&gt;&lt;/blockquote&gt;
&lt;pre class=&quot;cpp&quot;&gt;connect&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;a, &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;mon_signal&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;&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;,b, SLOT&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;mon_slot&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; argument&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;/pre&gt;

&lt;blockquote&gt;&lt;p&gt;Et on met encore moins de &lt;strong&gt;valeurs&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;pre class=&quot;cpp&quot;&gt;connect&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;a, &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;mon_signal&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;42&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;,b, SLOT&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;mon_slot&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;&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;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Vérifier que la signature&lt;/strong&gt; de mon signal est la &lt;strong&gt;même&lt;/strong&gt; que celle de mon slot&amp;nbsp;:&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;&lt;p&gt;C'est a dire que mon slot a les mêmes types d'arguments et le même nombre d'arguments que mon signal&lt;br /&gt;
&lt;strong&gt;note&lt;/strong&gt;: il est possible que le slot ait moins d'arguments que le signal, mais dans un soucis de clarté, ce doc  fait l'impasse la dessus&amp;nbsp;!&lt;/p&gt;&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Vérifier qu'il n'y a pas faute&lt;/strong&gt; de copier/coller, de parenthèses ou de caractères en trop dans SIGNAL() et SLOT().&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;&lt;p&gt;En effet SIGNAL() et SLOT() sont des macros qui, entres autres, convertissent leur contenu en chaine de caractère. Dans ce cas une erreur de syntaxe, ne provoque pas d'erreur à la compilation.&lt;/p&gt;&lt;/blockquote&gt;


&lt;h3&gt;Ca ne marche toujours pas&amp;nbsp;:&lt;/h3&gt;


&lt;p&gt;Alors une âme charitable pourra sûrement se pencher sur le problème (&lt;a href=&quot;http://forum.qtfr.org&quot; hreflang=&quot;fr&quot;&gt;forum&lt;/a&gt;)&lt;/p&gt;


&lt;h2&gt;Annexes&lt;/h2&gt;


&lt;h3&gt;Activer la console&lt;/h3&gt;


&lt;p&gt;La console est la sortie que Qt privilégie pour afficher ses messages d'erreurs.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Sous les systèmes un*x like, cette dernière est active par défaut, et pour visualiser les traces il suffit, d'exécuter son application depuis un shell ou se référer a la doc de son IDE afin de capturer la sortie standard.&lt;/li&gt;
&lt;li&gt;Sous les systèmes win32 il faut ajouter dans le fichier .pro du projet&amp;nbsp;:&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;&lt;p&gt;CONFIG += console&lt;br /&gt;&lt;/p&gt;&lt;/blockquote&gt;


&lt;blockquote&gt;&lt;p&gt;puis recompiler l'application.&lt;/p&gt;
&lt;p&gt;
Les traces seront alors affichées dans une console ouverte en parallèle de l'application si celle-ci n'est pas lancée depuis la ligne de commande. Dans ce dernier cas, les traces sont affichées dans la console ayant servi à l'appel&lt;/p&gt;&lt;/blockquote&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Dessiner avec Qt4</title>
    <link>http://doc.qtfr.org/post/2007/04/24/Dessiner-avec-Qt4</link>
    <guid isPermaLink="false">urn:md5:a363bb36b598957e1235db27a9b40129</guid>
    <pubDate>Tue, 24 Apr 2007 11:02:00 +0200</pubDate>
    <dc:creator>Visiteur</dc:creator>
        <category>Documentation</category>
        <category>class_QPaintDevice</category><category>class_QPaintEngine</category><category>class_QPainter</category><category>dessin</category><category>version_Qt4</category>    
    <description>&lt;ul&gt;
&lt;li&gt;Quelles sont les primitives de dessin de Qt4&amp;nbsp;?&lt;/li&gt;
&lt;li&gt;Où peut-on utiliser QPainter&amp;nbsp;?&lt;/li&gt;
&lt;li&gt;Quels sont les réglages et personnalisations possibles lors d'un dessin&amp;nbsp;?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ce document offre un excellent aide-mémoire pour tous ceux qui ont besoin d'utiliser le &lt;a href=&quot;http://doc.trolltech.com/4.3/paintsystem.html&quot; hreflang=&quot;en&quot;&gt;système de dessin de Qt&lt;/a&gt;. Basé sur la version 4.3, un grand nombre de fonctions et explications restent néanmoins valables pour des version inférieures de Qt (même Qt3).&lt;/p&gt;


&lt;p&gt;&lt;strong&gt;Version&lt;/strong&gt;&amp;nbsp;: Qt4 &lt;br /&gt;
&lt;strong&gt;Auteur&lt;/strong&gt;&amp;nbsp;: Véronique Lefrere&lt;/p&gt;    &lt;p&gt;Le document est disponible en &lt;strong&gt;libre téléchargement en PDF&lt;/strong&gt;&amp;nbsp;: &lt;a href=&quot;http://doc.qtfr.org/public/2007/dessiner-avec-qt4.pdf&quot;&gt;téléchargez&lt;/a&gt;.&lt;/p&gt;


&lt;p&gt;Il couvre tous les aspects du dessin (primitives, &lt;code&gt;QPainter&lt;/code&gt;, personnalisation...)&amp;nbsp;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dessiner quoi&amp;nbsp;?
&lt;ul&gt;
&lt;li&gt;Un (ou plusieurs) point(s) sur un plan donné&lt;/li&gt;
&lt;li&gt;Des segments&lt;/li&gt;
&lt;li&gt;Un polygone&lt;/li&gt;
&lt;li&gt;Un rectangle&lt;/li&gt;
&lt;li&gt;Un rectangles (angles arrondis)&lt;/li&gt;
&lt;li&gt;Une Ellipse&lt;/li&gt;
&lt;li&gt;Un Arc de cercle&lt;/li&gt;
&lt;li&gt;Une forme circulaire&lt;/li&gt;
&lt;li&gt;Une corde&lt;/li&gt;
&lt;li&gt;Un chemin&lt;/li&gt;
&lt;li&gt;Une région ou une zone&lt;/li&gt;
&lt;li&gt;Du texte&lt;/li&gt;
&lt;li&gt;Une pixmap ou une image&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Dessiner sur quoi?
&lt;ul&gt;
&lt;li&gt;Le support&lt;/li&gt;
&lt;li&gt;La region&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Dessiner comment&amp;nbsp;?
&lt;ul&gt;
&lt;li&gt;Les pré-réglages de dessin&lt;/li&gt;
&lt;li&gt;La transparence&lt;/li&gt;
&lt;li&gt;L’Anti-crènelage (anti-aliasing)&lt;/li&gt;
&lt;li&gt;Les lignes et contours&lt;/li&gt;
&lt;li&gt;Le remplissage&lt;/li&gt;
&lt;li&gt;Avec du style&lt;/li&gt;
&lt;li&gt;Du texte haut en couleur&lt;/li&gt;
&lt;li&gt;Le Système de coordonnées&lt;/li&gt;
&lt;li&gt;La Conversion des coordonnées logiques en coordonnées physiques (et inversement)&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    
          <enclosure url="http://doc.qtfr.org/public/2007/dessiner-avec-qt4.pdf"
      length="342258" type="application/pdf" />
    
    
      </item>
    
  <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>