在调整父窗口小部件大小时保持纵横比调整子窗口小部件的大小

时间:2013-10-07 10:48:23

标签: qt qt4 qwidget qt4.8

我在名为QWidgets的{​​{1}}中有四个小部件我试图将这四个小部件放在FourWindowWidget中作为顶部并保持在其中,而顶部小部件应始终具有70%的大小FourWindowWidget。我试过以下:

FourWindowWidget

现在问题是现在View1有固定的大小,但FourWindowWidget的大小不固定。当我删除其周围的任何其他小部件时,它会更改,例如关闭停靠小部这个调整大小是预期的,或者说我不想修复它。因此,当FourWindowWidget调整大小时,其子窗口小部件应按照比例设置。但我无法做到这一点 1.没有任何信号通知调整大小,因此将计算内部小部件的高度。 2.没有其他方法我发现在网格布局中设置顶部小部件的70%高度而不是setFixedHeight。

我尝试过将QSizePolicy设置为setHieghtForWidth但是iit不是一个可行的解决方案。 请建议我以任何方式这样做。


该问题与Resizing Qt Widgets based on Window size有点重复,但没有人回答。

1 个答案:

答案 0 :(得分: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%。