QGridLayout无法按预期工作

时间:2015-12-30 05:14:40

标签: c++ qt user-interface

我正在使用Qt5.5为我的项目构建gui并尝试使用QGridLayout。

第一来源

此代码按预期工作。

QGridLayout * layout = new QGridLayout;
layout->addWidget(lineEdits[0], 0,0,1,1);
layout->addWidget(lineEdits[1], 0,1,1,1);

layout->addWidget(lineEdits[2], 1,0,1,1);
layout->addWidget(lineEdits[3], 1,1,1,2);

layout->addWidget(lineEdits[4], 2,0,1,2);
layout->addWidget(lineEdits[5], 2,2,1,1);
this->setLayout(layout);

这是我得到的结果。

First case

第二个来源

但是这段代码产生了破碎的布局,这与我的预期相差甚远。

QGridLayout * layout = new QGridLayout;
layout->addWidget(lineEdits[0], 0,0,1,1);
layout->addWidget(lineEdits[1], 0,1,1,2); //this is the only difference

layout->addWidget(lineEdits[2], 1,0,1,1);
layout->addWidget(lineEdits[3], 1,1,1,2);

layout->addWidget(lineEdits[4], 2,0,1,2);
layout->addWidget(lineEdits[5], 2,2,1,1);
this->setLayout(layout);

enter image description here

我不知道如何解决这个问题。

我会提前感谢您的建议。

1 个答案:

答案 0 :(得分:2)

问题在于,没有任何东西可以给中间列带来任何明显的宽度 - 它是唯一可以让它可见的是柱间间距,这就是为什么最后一行没有& #39;与其他两个对齐。

解决此问题的一种方法是设置列stretch因子。例如,试试这个(所有列的相同因素,实际数字并不重要,只有比例):

//...
layout->addWidget(lineEdits[5], 2, 2, 1, 1);
for (int i=0; i<3; ++i)
  layout->setColumnStretch(i, 1);
this->setLayout(layout);

这给了我以下布局:

enter image description here

另一个选择是强制其中一个多列小部件&#39;明确宽度,但如果可以,最好避免使用。