0

QWidgets名前付きで 4 つのウィジェットがあり、FourWindowWidgetこれらの 4 つのウィジェットを FourWindowWidget に 1 つとして配置し、その下に配置しようとしていますが、一番上のウィジェットは常に FourWindowWidget のサイズの 70% を持つ必要があります。私は次のことを試しました:

QSize size = ui->FourWindowWidget->size();

ui->View1->setFixedHeight(size.height()*0.70);

QHBoxLayout * lay = new QHBoxLayout();
lay->addWidget(ui->View2);
lay->addWidget(ui->View3);
lay->addWidget(ui->View4);
lay->setMargin(0);
lay->setContentsMargins(0,0,0,0);

QGridLayout * mainlay =  new QGridLayout;
mainlay->addWidget(ui->View1,0,0);
mainlay->setContentsMargins(0,0,0,0);
mainlay->setHorizontalSpacing(0);
mainlay->setSpacing(0);
mainlay->setMargin(0);
mainlay->addLayout(lay,1,0);

delete ui->FourWindowWidget->layout();
ui->FourWindowWidget->setLayout(mainlay);
this->update();

現在、問題は View1 のサイズが固定されていることですが、FourWindowWidget のサイズは固定されていません。ドックウィジェットを閉じるなど、周囲の他のウィジェットを削除すると変化します。このサイズ変更は想定されているか、修正したくないと言います。そのため、FourWindowWidget のサイズが変更されるたびに、その子ウィジェットは比率セットに従っている必要があります。しかし、私はこれを行うことができません原因1.サイズ変更を通知する信号がないため、内部ウィジェットの高さが計算されます。2. グリッド レイアウトで setFixedHeight を使用する以外に、トップ ウィジェットの高さを 70% に設定する方法が見つかりませんでした。

QSizePolicy を setHieghtForWidth に設定してみましたが、iit は有効な解決策ではありません。何らかの方法でこれを行うように提案してください。


質問は、ウィンドウ サイズに基づいて Qt ウィジェットのサイズを変更するのと同じようなものですが、誰も答えませんでした。

4

1 に答える 1

2

レイアウトの伸縮係数を設定するとうまくいくはずです。同じ列にすべてを追加しているときに、なぜグリッド レイアウトを使用しているのかわかりませんが、次の例が機能します。

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    gridLayout = new QGridLayout;
    this->centralWidget()->setLayout(gridLayout);
    label1 = new QLabel("l1");
    label2 = new QLabel("l2");
    label3 = new QLabel("l3");
    label4 = new QLabel("l4");
    gridLayout->addWidget(label1, 0, 0);
    gridLayout->addWidget(label2, 1, 0);
    gridLayout->addWidget(label3, 2, 0);
    gridLayout->addWidget(label4, 3, 0);
    gridLayout->setRowStretch(0,7);
    gridLayout->setRowStretch(1,1);
    gridLayout->setRowStretch(2,1);
    gridLayout->setRowStretch(3,1);
}

この例label1では、使用可能な垂直方向のスペースの 70% を使用しますが、他のラベルは使用可能な垂直方向のスペースの合計 30% を使用します。

于 2013-10-07T12:25:25.510 に答える