« Programmation Qt/Le positionnement des widgets » : différence entre les versions

Contenu supprimé Contenu ajouté
Athozus (discussion | contributions)
m introduction des chapitres précédents et suivants
Athozus (discussion | contributions)
Complétion
Ligne 4 :
 
== Le positionnement absolu ==
Le positionnement absolu est celui que nous avons vu jusqu'ici. Nous le reverrons en détail.
 
=== Utiliser le positionnement absolu ===
Nous avons plusieurs méthodes pour utiliser le positionnement absolu.
 
* <code>monWidget->move(50, 70);</code> déplace le widget à l’abscisse (x) 50 et l'ordonnée (y) 70. Les attributs sont exprimées en pixels.
* <code>monWidget->setSize(24, 89);</code> redimensionne le widget de 24 pixels de largeur et de 89 pixels de hauteur.
* <code>monWidget->setGeometry(50, 70, 24, 89);</code> déplace le widget à l'abscisse 50 et à l'ordonnée 70 tout en lui donnant une largeur de 24 et une hauteur de 89.
 
=== Les défauts du positionnement absolu ===
Malheureusement, le positionnement absolu comporte des défauts. Essayez de redimensionner la fenêtre pour qu'elle soit la plus petite possible. Votre widget va se couper, ou bien, si vous faites une trèèès petite fenêtre, va disparaître ! C'est pour cela que nous allons découvrir un nouveau positionnement, le positionnement relatif.
 
<small><u>Note :</u> Si vous utilisez la méthode <code>setFixedSize()</code>, vous pouvez utiliser le positionnement absolu. C'est comme cela que fonctionne certains jeux.</small>
 
== Le positionnement relatif ==
Eh bien, l'heure est venue de découvrir le '''positionnement relatif'''. On utilisera 4 classes issus de <code>QLayout</code> : <code>QHBoxLayout</code> et <code>QVBoxLayout</code>, issues de la classe <code>QBoxLayout</code> (classe abstraite), <code>QGridLayout</code> et <code>QFormLayout</code>.
Maintenant, nous allons découvrir ce fameux positionnement :
 
=== Principe des layouts ===
Le principe des layouts est simple : les widgets s'adaptent à la taillent de la fenêtre. Pour cela, ils utilisent des "grilles", numérotées :
{| class="wikitable"
|+Principe des layouts
|0, 0
|0, 1
|-
|1, 0
|...
|-
|0, 1
|1, 1
|...
|-
|...
|...
|...
|}
Maintenant, attaquons-nous au code.
Grâce à ce nouveau positionnement, l'utilisateur pourra redimensionner sa fenêtre et que les widgets restent visible ; par contre, il y aura une limite de redimensionnement.
 
=== <code>QHBoxLayout</code> : layout horizontal ===
Dans ce premier layout, nous allons découvrir quelques méthodes, qui s'utiliseront aussi pour les autres layouts. Imaginons que vous voulez des boutons.<syntaxhighlight lang="c++" line="1" start="1">
QWidget *maPage = new QWidget(); /* Création de la page qui contiendra le layout */
 
/* Création des boutons */
QPushButton *bouton1 = new QPushButton("Wiki");
QPushButton *bouton2 = new QPushButton("Books");
 
QHBoxLayout *monLayout = new QHBoxLayout(); /* Création du layout */
/* Ajout des widgets dans le layout */
monLayout->addWidget(bouton1);
monLayout->addWidget(bouton2);
 
maPage->setLayout(monLayout); /* Le layout appartient désormais à l'objet maPage */
</syntaxhighlight>On remarque les méthodes :
 
* <code>addWidget()</code> : ajout d'un widget dans le layout.
* <code>setLayout()</code> : définition du layout pour le widget demandé.