9
votes

QT: Quelle est la différence entre la mise en page et le widget?

Je pensais que la mise en page est juste un widget qui maintient plus de widgets à l'intérieur. Mais maintenant, je trouve que je ne peux pas l'ajouter à d'autres widgets à l'aide de Addwidget. Par exemple, comment ajouter une mise en page à QSplitter?


0 commentaires

3 Réponses :


4
votes

Non, une mise en page n'est pas un widget ni un conteneur. Une mise en page ressemble davantage à une "assistante" qui est attachée à une fenêtre et de chiffrer le meilleur endroit pour mettre chaque widget.

Cet exemple des documents QT devrait aider ( http://qt.nokia.com/doc/4.2/layout.html ): p>

QWidget *window = new QWidget;
QPushButton *button1 = new QPushButton("One");
QPushButton *button2 = new QPushButton("Two");
QPushButton *button3 = new QPushButton("Three");
QPushButton *button4 = new QPushButton("Four");
QPushButton *button5 = new QPushButton("Five");

QHBoxLayout *layout = new QHBoxLayout;
layout->addWidget(button1);
layout->addWidget(button2);
layout->addWidget(button3);
layout->addWidget(button4);
layout->addWidget(button5);

window->setLayout(layout);
window->show();


0 commentaires

4
votes

qlayout s sont des gestionnaires de la présentation. Ils gèrent le positionnement et le redimensionnement des widgets à l'intérieur d'un widget parent. Du Docs:

Layouts est un moyen élégant et flexible d'organiser automatiquement des widgets enfants dans leur conteneur. Chaque widget rapporte ses exigences de taille à la disposition dans les propriétés TIZEHINT et SIZEPOLICY, et la mise en page distribue l'espace disponible en conséquence.

Par exemple, régler la mise en page d'un widget sur qhboxlayout entraînera la mise en place de ses widgets d'enfant horizontalement.

Vous pouvez en savoir plus sur ici .


0 commentaires

7
votes

Qwidget a pris en charge la prise en charge des présentations via le mise en page () et setlayout (...) fonctions. L'objet de mise en page contrôle le positionnement de différents widgets d'enfants pouvant être ajoutés à la disposition. En outre, il veille à former correctement son widget parent basé sur le contraintes spécifié. Si la mise en page n'a pas encore de widget parent, alors dès que la mise en page est attachée à un widget avec setlayout () , il définira la taille de ce widget parent.

Mais, certains widgets ressemblent davantage à un gestionnaire de mise en page qu'un widget, tel que qsplitter et Qtabwidget . Considérez, par exemple, QSplitter. Bien qu'un seul widget, il présente deux domaines différents pouvant être collaborés. Dans ce cas, un seul gestionnaire de mise en page pour deux domaines différents n'a pas vraiment de sens. Comme QSplitter, Qtabwidget a des comportements qui font une seule disposition non seulement inutile mais pas utile.

Je pense que c'est la fusion ci-dessus de la mise en page et du widget qui rend la séparation de la mise en page et du widget déroutant parfois.


2 commentaires

Si vous utilisez la langue du modèle de conception du contrôleur de modèles-View-contrôleur. Est-il correct de dire que la "mise en page" est le contrôleur? Ou pouvez-vous ne pas le relier au modèle de conception "modèle-View-contrôleur"?


Question ancienne, mais non, la mise en page fait partie de la vue dans un modèle de conception MVC. Le but est de découpler le (s) modèle (s), vue (s) et contrôleur (s). Il est tout à fait possible de changer la mise en page sans aucune modification du modèle ou du contrôleur (imaginez la modification d'une liste d'éléments d'une disposition horizontale à une disposition verticale, par exemple). La vue, cependant, changerait nécessairement. La mise en page fait partie de la vue.