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

Contenu supprimé Contenu ajouté
Athozus (discussion | contributions)
Complétion
Athozus (discussion | contributions)
Ligne 57 :
* <code>addWidget()</code> : ajout d'un widget dans le layout.
* <code>setLayout()</code> : définition du layout pour le widget demandé.
 
=== <code>QVBoxLayout</code> : layout vertical ===
Le fonctionnement de <code>QVBoxLayout</code> est le même que <code>QHBoxLayout</code>, à l’exception que cette fois-ci, c'est à la verticale. Autrement dit, je peux vous laisser remplacer les noms de classes.
 
=== <code>QGridLayout</code> : un layout en grille ===
Intéressants, les deux au-dessus, mais plus tard, vous aurez forcément besoin d'un layout en grille. C'est là qu'intervient <code>QGridLayout</code> : un layout en grille, comme le schéma du principe des layouts plus haut dans la page. Notre belle méthode <code>addWidget()</code> va se transformé :<syntaxhighlight lang="c++" line="1" start="1">
QPushButton *wi = new QPushButton("Wi"); /* Création des boutons */
QPushButton *ki = new QPushButton("ki");
QPushButton *books = new QPushButton("books");
 
/* Introduction des boutons dans le layout */
QGridLayout *m_layout = new QGridLayout();
m_layout->addWidget(wi, 0, 0); /* En haut à gauche */
m_layout->addWidget(ki, 1, 0); /* En haut à droite */
m_layout->addWidget(books, 1, 1, 1, 2); /* En bas */
 
/* Introduction du layout dans la page */
QWidget *m_page = new QWidget();
m_page->setLayout(m_layout);
</syntaxhighlight>Les deux premiers boutons sont tous les deux en haut, l'un à gauche et l'autre à droite. Mais le troisième bouton, lui est entièrement en bas car nous avons inséré deux nouveaux chiffres : <code>rowSpan</code> et <code>columnSpan</code>. On dit donc que le widget doit prendre 1 ligne en hauteur et 2 colonnes en hauteur.
 
=== <code>QFormLayout</code> : un layout pour formulaire ===
Il se peut qu'un jour, vous voudriez mettre vos formulaires dans un layout. Mais c'est très long. C'est pour cela que <code>QFormLayout</code> à été créé : un layout spécialement fait pour les formulaires. Voici comment on s'en sert :<syntaxhighlight lang="c++" line="1" start="1">
/* Création des widgets */
QLineEdit *nom = new QLineEdit();
QLineEdit *langageProg = new QLineEdit();
 
/* Création et introduction dans le layout */
QFormLayout *monLayout = new QFormLayout();
monLayout->addRow("Votre nom : ", nom);
monLayout->addRow("Votre langage de programmation préféré : " langageProg);
 
/* Création et introduction dans la page **/
QWidget *maPage = new QWidget();
maPage->setLayout(monLayout);
</syntaxhighlight>Ce layout fonctionne de la manière suivante : avec la méthode <code>addRow()</code>, on met le libellé du champ et le nom du champ.
 
=== Combiner les layouts ===
C'est vite lassant un layout par programme. C'est pour cela qu'on peut les combiner !<syntaxhighlight lang="c++" line="1" start="1">
QLineEdit *nom = new QLineEdit();
QLineEdit *prenom = new QLineEdit();
 
QFormLayout *layoutFormulaire = new QFormLayout();
layoutFormulaire->addRow("Votre nom : ", nom);
layoutFormulaire->addRow("Votr prénom : ", prenom);
 
QPushButton *boutonQuitter = new QPushButton("Quitter");
 
QVBoxLayout *layoutPrincipal = new QVBoxLayout();
layoutPrincipal->addLayout(layoutFormulaire); /* Utilisation de la méthode addLayout() */
layoutPrincipal->addWidget(boutonQuitter);
 
QWidget *maPage = new QWidget();
maPage->setLayout(layoutPrincipal);
</syntaxhighlight>La méthode pour combiner les layouts est <code>addLayout()</code>.