我正在构建一个应用程序,其中包含一个开始为空的滚动区域。然后,可以应用户要求包括不限数量的不同宽度。由于小部件不大,我希望将它们放置在网格中,并按行和列进行组织。理想情况下,行将从右到左,从上到下填充。
我希望将它们放置在下图中,其中数字表示添加的顺序:
但是,我得到的是这样:
我正在做的是以下事情:
在代码中,我添加了小部件。我实际上正在使用自己的窗口小部件类,但过程如下:
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以我想要的方式放置小部件?
答案 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);