2008-10-24 7 views
12

J'ai un dialogue complexe, il est plein d'espaces et je ne peux pas le réduire. Dans Designer, il y a beaucoup de composants qui sont ensuite cachés dynamiquement, et quelques-uns qui sont ajoutés dynamiquement. J'ai ajouté le dumping des politiques de taille, des conseils de taille, et des tailles minimales, mais ne peux toujours pas comprendre pourquoi Qt ne me laissera pas le traîner plus petit.Comment déboguer les problèmes de mise en page Qt

Il doit y avoir quelques outils ou techniques pour résoudre ce problème.

Veuillez partager.

Répondre

4

Je ne connais pas d'outils pour cela, mais je l'ai déjà fait en changeant la palette des différents éléments de la boîte de dialogue, puis en regardant ce qui occupe plus (ou moins) de place que ce à quoi je m'attendais et en concentrant mon enquête sur ces éléments. Dans un sens plus général, assurez-vous d'avoir défini la boîte de dialogue pour qu'elle ne soit pas de taille fixe. Ça m'a mordu une fois aussi.

1

On dirait que nous pourrions utiliser l'équivalent de l'élément Firebug et des modes inspecteurs des métriques CSS. La partie la plus difficile d'un tel outil serait de comprendre et de communiquer efficacement pourquoi une politique de mise en page individuelle utilisait ou n'utilisait pas une valeur de taille donnée dans un widget.

1

Il est difficile de dire sans voir votre mise en page, mais je vois beaucoup de problèmes de redimensionnement que vous décrivez en raison de l'utilisation de QGridLayout. La plus grande chose dans une colonne ou une rangée, va déterminer la largeur minimale de cette colonne. La même chose pour une rangée.

Si vous utilisez QGridLayout, vous pouvez essayer de créer span columns/rows.

Je vous recommande également d'essayer toutes vos différentes configurations de mise en page dans Designer et de le tester en redimensionnant. Nous n'utilisons pas réellement Designer où je travaille, mais je l'utilise tout le temps pour tester et déboguer des idées de mise en page.

3

Vous pouvez capturer le signal QApplication :: focusChanged (QWidget *, QWidget *) et modifier l'arrière-plan du widget actuellement ciblé. Je pense que cela aiderait à déterminer combien d'espace chaque widget occupe.

0

Beaucoup d'essais et d'erreurs. J'ai découvert que l'insertion d'étirements dans des endroits stratégiques m'aide souvent à produire l'effet que je veux. Par exemple, si j'ai un QPushButton dans une mise en page que je veux être la taille minimum que je vais faire quelque chose comme ce qui suit:

 

QHBoxLayout* layout = new QHBoxLayout; 
QPushButton* myBtn = new QPushButton("Test"); 

layout->insertStretch(1); 
layout->addWidget(myBtn, 0); 
layout->insertStretch(1); 
 

Aussi, ne pas oublier que vous pouvez définir la marge de contenu d'une mise en page avec setContentsMargins(). Je n'utilise pas Designer car j'ai découvert que je comprends mieux le système de mise en page quand je le joue avec du code.

Questions connexes