J'essaie de mettre en place une fenêtre (tout en code) avec un qgridlayout code>. Je peux ajouter des widgets à la mise en page et afficher dans ma fenêtre, mais je ne peux pas comprendre comment les redimensionner correctement. Voici ce que j'aimerais // Create the subviews, add them to a grid layout, and set the layout to the window.
QTableView *list = new QTableView(0);
list->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
QTableView *flashList = new QTableView(0);
flashList->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
QPushButton *infoButton = new QPushButton("Info!");
QPushButton *flashFeedsButton = new QPushButton("Flashfeeds");
QGridLayout *gridLayout = new QGridLayout;
// Set the minimum widths for all three columns of the grid
gridLayout->setColumnMinimumWidth(GridColumnFirst, 300);
gridLayout->setColumnMinimumWidth(GridColumnSecond, 300);
gridLayout->setColumnMinimumWidth(GridColumnThird, 300);
// Set the minimum heights for all rows of the grid
int headerFooterHeight = 44;
gridLayout->setRowMinimumHeight(GridRowFirst, headerFooterHeight);
gridLayout->setRowMinimumHeight(GridRowSecond, 200);
gridLayout->setRowMinimumHeight(GridRowThird, headerFooterHeight);
// Set the stretch factors
gridLayout->setColumnStretch(GridColumnFirst, 1);
gridLayout->setColumnStretch(GridColumnFirst, 2);
gridLayout->setColumnStretch(GridColumnThird, 1);
gridLayout->addWidget(list, 1, 0, Qt::AlignLeft);
gridLayout->addWidget(flashList, 1, 1, Qt::AlignCenter);
gridLayout->addWidget(infoButton, 0, 3, Qt::AlignRight);
gridLayout->addWidget(flashFeedsButton, 0, 1, Qt::AlignLeft);
_mainWindow->setLayout(gridLayout);
3 Réponses :
Il devrait simplement s'agir de définir la stratégie de taille appropriée sur vos widgets. Donc les boutons de gauche et droite: et pour le bouton central p> où le premier argument définit la politique de taille horizontale et La seconde définit la stratégie de taille verticale. P> Voir La documentation de la stratégie de taille aussi bien p> p>
Vous avez beaucoup de variables ici (différents widgets, stratégies de taille différentes sur les widgets et les politiques de taille travaillant sur la mise en page elle-même, il est donc un peu difficile de savoir où les choses se passent mal. Quelques suggestions: p>
1) Essayez d'abord d'accomplir ce que vous voulez avec un seul type de widget. Par exemple, tous les qlabels avec toutes les stratégies de taille d'expansion. 2) Ajustez uniquement les stratégies de taille des widgets, j'ai constaté que l'ajout de choses dans la disposition de la grille commence à rendre les choses déroutantes. Le facteur étirement de la politique de taille du widget devrait fonctionner correctement. 3) N'ayez pas peur d'essayer différents ratios pour des facteurs d'étirement. P>
J'ai constaté que c'est l'une des choses où Qt Designer (Creator) est utile pour dérouler ces choses. Il est beaucoup plus rapide d'ajuster les choses dans les concepteurs et de redimensionner le cycle de compilation d'exécution. Après avoir résolu le problème là-bas, vous pouvez prendre les propriétés que vous avez trouvées et la mettre dans votre code au lieu d'une modification, compilez, courez. P>
Regardez les docs sur QGriDlayout :: Addwidget :
L'alignement par défaut est 0, ce qui signifie que le widget remplit la cellule entière. P> blockquote>
Mais vous avez ce qui suit: p>
gridLayout->addWidget(list, 1, 0, Qt::AlignLeft); gridLayout->addWidget(flashList, 1, 1, Qt::AlignCenter); gridLayout->addWidget(infoButton, 0, 3, Qt::AlignRight); gridLayout->addWidget(flashFeedsButton, 0, 1, Qt::AlignLeft);
Dang. J'ai raté que lorsque vous lisez les docs. Ça l'a fait. Merci!