Je crée un widget qui contient une table d'échecs et six boutons qui sont affichés sur 2 lignes sous la table d'échecs. Les rangées de boutons sont plus larges que la table d'échecs. La table et les boutons d'échecs sont dans un QGridLayout. La table d'échecs a sa taille sizeHint calculée à partir de la taille des carrés. Après quelques opérations, je supprime les boutons et redimensionne le widget qui contient tout à sa taille sizeHint (resize(sizeHint())
). Le widget se redimensionne correctement dans la direction verticale mais dans la direction horizontale il reste aussi large que si les rangées de boutons étaient là. Quel est le problème ?layout sizeHint qwidget
Si je construis le widget uniquement avec la table d'échecs, la mise en page dimensionne correctement le widget.
J'ajoute le code:
Dans le constructeur de la fenêtre:
renderArea = new RenderArea(m_row,m_col,m_grid);
formLayout = new QGridLayout;
formLayout->addWidget(renderArea,0,0,1,3);
setLayout(formLayout);
Dans la fonction qui ajoute les boutons:
addPlaneButton = new QPushButton(tr("Add plane"));
cancelButton = new QPushButton(tr("Cancel operation"));
movePlaneButton = new QPushButton(tr("Move plane"));
deletePlaneButton = new QPushButton(tr("Delete plane"));
rotatePlaneButton = new QPushButton(tr("Rotate plane"));
doneButton = new QPushButton(tr("Done"));
doneButton->setEnabled(false);
infoLabel = new QLabel(tr("Welcome to the plane editor"));
statusLabel = new QLabel();
formLayout->addWidget(statusLabel,1,0,1,3);
formLayout->addWidget(infoLabel,2,0,1,3);
formLayout->addWidget(addPlaneButton,3,0);
formLayout->addWidget(movePlaneButton,3,1);
formLayout->addWidget(deletePlaneButton,3,2);
formLayout->addWidget(rotatePlaneButton,4,0);
formLayout->addWidget(cancelButton,4,1);
formLayout->addWidget(doneButton, 4,2);
Dans la fonction qui supprime tout en plus la table d'échecs:
formLayout->removeWidget(addPlaneButton);
formLayout->removeWidget(cancelButton);
formLayout->removeWidget(movePlaneButton);
formLayout->removeWidget(deletePlaneButton);
formLayout->removeWidget(rotatePlaneButton);
formLayout->removeWidget(doneButton);
formLayout->removeWidget(infoLabel);
formLayout->removeWidget(statusLabel);
delete addPlaneButton;
delete cancelButton;
delete movePlaneButton;
delete deletePlaneButton;
delete rotatePlaneButton;
delete doneButton;
delete infoLabel;
delete statusLabel;
resize(sizeHint());
Le sizeHint pour la table d'échecs est calculé comme suit:
return QSize(m_rowNo*spacing, m_colNo*spacing)+QSize(31,31);
Ce n'est pas vraiment assez d'informations. – Robert
J'ai mis à jour ma question avec du code. – Cristi