Comprendre les mécanismes de mise en forme dans Qt

Qt dispose d’un mécanisme de mise en page flexible et puissant pour gérer l’affichage des fenêtres de l’application de bureau.

Mais il est si flexible, quasiment impossible à comprendre, quand quelque chose ne va pas et nécessite des ajustements précis. Et si puissant, qu’il peut vaincre quiconque dans ses tentatives pour écraser l’opinion de Qt sur la façon dont la forme devrait ressembler.

Ainsi, quelqu’un peut-il expliquer, ou fournir des articles, ou la source des mécanismes de positionnement de Qt?

J’essaie de forcer QLabel , QPushButton et QTableView , marqués par des caractères de soulignement de fin dans leurs noms, soit deux fois plus élevé que QTextBrowser ayant verticalStretch = 1 ci-dessous. Comment puis-je gérer la hauteur du widget correctement?

fichier .ui de mon formulaire sur google docs. Rechercher “____” dans les noms, prévisualiser dans QtDesigner

Les mises en page sont en fait faciles à comprendre “je pense” 🙂
Une explication simple des dispositions peut être trouvée dans le livre qt ” Programmation Gui C ++ avec QT 2nd edition

Ce que vous devez savoir concernant les dispositions et leur taille

  • La plupart des widgets Qt ont une politique de taille. Cette politique de taille indique au système comment le widget doit s’étirer ou se réduire. Il provient de la classe QSizePolicy. Une politique de taille a des composants verticaux et horizontaux.
  • La plupart des widgets ont également une taille Astuce. Cet indice de taille indique au système une taille preffed de widgets
  • QSizePolicy a un facteur d’étirement pour permettre aux widgets de croître à des vitesses différentes

Je ne connais que les politiques de taille 4

  • politique de taille fixe – La taille du widget est fixe et il ne peut pas être étiré. Il rest à son indice de taille.
  • politique de taille minimum – L’indice de taille est la plus petite taille possible du widget, mais il PEUT ENCORE grossir si nécessaire.
  • Politique de taille préférée – le widget peut diminuer ou devenir plus grand que son indice de taille.
  • politique de taille en expansion – le widget peut se réduire ou devenir plus gros que son indice de taille 🙂

Vous voudrez peut-être demander,

Quelle est la différence entre préféré et en expansion?
réponse: Imaginez un formulaire avec 2 widgets, un avec préféré et un autre avec expansion, puis tout espace supplémentaire sera donné au widget avec la politique en expansion. Le widget avec la stratégie préférée restra à sa taille.

Je recommande (ATTENTION: je ne suis pas un expert :)) vous achetez et lisez à traversC ++ Gui programmation avec QT 2nd edition “. Je suis en train de le lire et de le faire beaucoup de sens. Regardez les images et voyez si elles ont du sens.

Expliquer les règles de taille
Politique de taille expliquée

Un exemple simple
Il s’agit d’un dialog simple avec 2 boutons dont les règles de taille horizontale et verticale sont affichées, de même que l’étirement horizontal et vertical.

Exemple

Voici l’aperçu à sa plus petite taille. texte alt

Voici un autre aperçu à une plus grande taille texte alt

[EDITED: // exemple de conseil de taille ajouté]

POURQUOI VOUS AIDER À SIZEHINT
Vous pouvez voir que chaque widget a un sizeHint qui est vital car le système de mise en page de QT respecte toujours le sizeHint. Ce n’est un problème que si la taille par défaut du widget n’est pas exactement ce que vous voulez. La seule solution à ce problème consiste à étendre (sous-classe) le widget et à réimplémenter sa fonction membre sizeHint (). Un exemple vaut 1000 mots. Pour gagner de la place, consultez mon blog où il y a un exemple de projet.

Vous pouvez utiliser les feuilles de style QT pour contrôler facilement la hauteur des widgets et d’autres propriétés.

http://doc.qt.io/archives/qt-4.7/stylesheet.html

En ce qui concerne les mises en page, vous devez les utiliser judicieusement et fortement couplées avec des entretoises pour que les widgets se comportent exactement comme vous le souhaitez.

http://doc.qt.io/archives/qt-4.7/designer-layouts.html