添加到网格布局的QWidgets就像是垂直布局一样放置

时间:2020-02-06 12:46:56

标签: qt qwidget qlayout

我正在构建一个应用程序,其中包含一个开始为空的滚动区域。然后,可以应用户要求包括不限数量的不同宽度。由于小部件不大,我希望将它们放置在网格中,并按行和列进行组织。理想情况下,行将从右到左,从上到下填充。

我希望将它们放置在下图中,其中数字表示添加的顺序:

enter image description here

但是,我得到的是这样:

enter image description here

我正在做的是以下事情:

  1. 在ui文件中,我有一个滚动区域,其中包括使用此设置的网格布局: enter image description here

  2. 在代码中,我添加了小部件。我实际上正在使用自己的窗口小部件类,但过程如下:

    QWidget *w1 = new QWidget(this);
    ui->layout_output_grid->addWidget(w1);
    QWidget *w2 = new QWidget(this);
    ui->layout_output_grid->addWidget(w2);
    QWidget *w3 = new QWidget(this);
    ui->layout_output_grid->addWidget(w3);
    QWidget *w4 = new QWidget(this);
    ui->layout_output_grid->addWidget(w4);
    QWidget *w5 = new QWidget(this);
    ui->layout_output_grid->addWidget(w5);
    

问题

有没有办法做到这一点? 作为一种解决方法,我假设我可以保持添加的小部件的数量,并以不同的水平布局实现行,但是我想知道是否有解决方案让Qt以我想要的方式放置小部件?

1 个答案:

答案 0 :(得分:0)

您可以指定要添加的小部件(1、2、3、4、5)必须占据的行,列和行跨度/列。

寻找此重载函数:https://doc.qt.io/archives/qt-4.8/qgridlayout.html#addWidget-2

在这种情况下,您应该执行以下操作:

QWidget *w1 = new QWidget(this);
ui->layout_output_grid->addWidget(w1, 0, 0, 1, 1);
QWidget *w2 = new QWidget(this);
ui->layout_output_grid->addWidget(w2, 0, 1, 1, 2);
QWidget *w3 = new QWidget(this);
ui->layout_output_grid->addWidget(w3, 1, 0, 1, 1);
QWidget *w4 = new QWidget(this);
ui->layout_output_grid->addWidget(w4, 1, 1, 1, 1);
QWidget *w5 = new QWidget(this);
ui->layout_output_grid->addWidget(w5, 1, 2, 1, 1);