0

我在一个QWidgets命名中有四个小部件FourWindowWidget我试图将这四个小部件放在 FourWindowWidget 中作为顶部的一个并保留在其下方,而顶部的小部件应始终具有 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.没有其他方法我发现在网格布局中设置顶部小部件的 70% 高度而不是 setFixedHeight。

我尝试将 QSizePolicy 设置为 setHieghtForWidth ,但它不是一个有效的解决方案。请建议我以任何方式这样做。


这个问题有点像 Resizing Qt Widgets based on Window size但没有人回答。

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 回答