チェステーブルと、チェステーブルの下に2行で表示される6つのボタンを含むウィジェットを作成しています。ボタンの行はチェスのテーブルよりも幅が広いです。チェスのテーブルとボタンはQGridLayoutにあります。チェステーブルには、正方形のサイズから計算された独自のsizeHintがあります。
いくつかの操作の後、ボタンを削除し、すべてを含むウィジェットのサイズをsizeHint(resize(sizeHint())
)に変更します。ウィジェットは垂直方向に適切にサイズ変更されますが、水平方向では、ボタンの行がそこにあるかのように幅が維持されます。何が問題ですか ?
チェステーブルのみを使用してウィジェットを作成すると、レイアウトはウィジェットのサイズを適切に設定します。
私はコードを追加しています:
ウィンドウのコンストラクター:
renderArea = new RenderArea(m_row,m_col,m_grid);
formLayout = new QGridLayout;
formLayout->addWidget(renderArea,0,0,1,3);
setLayout(formLayout);
ボタンを追加する関数では:
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);
チェステーブル以外のすべてを削除する関数では、次のようになります。
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());
チェステーブルのsizeHintは、次のように計算されます。
return QSize(m_rowNo*spacing, m_colNo*spacing)+QSize(31,31);