我想在QFormLayout中强制扩大空间,但是无论哪种QFormLayout仅使用QSpaceItem::sizeHint()。有谁知道解决这个问题的方法,或者解决这个问题的正确方法?

MyWidget::MyWidget(QWidget *parent) : QWidget(parent)
{
   SetupLayout();
}

void MyWidget::SetupLayout()
{
   QFormLayout * layout = new QFormLayout();

   layout->addRow("Something1", new QComboBox());
   layout->addRow("Something2", new QSpinBox());

   //Spacer
   layout->addItem(new QSpacerItem(0,10, QSizePolicy::Expanding, QSizePolicy::Expanding));

   layout->addRow(QPushButton("Something3"));

   setLayout(layout);
}

最佳答案

经过大量的手动和尝试的尝试,我想使用QFormLayout做您想做的事情是不可能的。

此布局是为具有很多要填充的字段的窗口而设计的,但仅此而已。

如果要在表单的各个部分之间添加更大的间距,则可以使用QVBoxLayout及其内部的几个QFormLayout(以间距分隔)。
请注意,在这种情况下,每个部分的第一列和第二列都将具有自己的宽度,因此这也许不是最佳解决方案。

另一个解决方案(如果我们正在谈论对某些选项进行分组的话)是使用其中带有QFormLayouts的两个QGroupBoxes。各个组将不会因间距的增加而分开,但将非常容易阅读,您可以为组命名。如果您要分组选项-这可能是最常见且用户友好的方式。

如果只希望获得所指向的视觉效果-每节中的宽度相同且各节之间的间距越来越大,则可以将QGridLayout与2列一起使用,并在各节之间的行中添加间隔符。在这种情况下,您必须创建QLabel才能自己将其放入第一列。

10-02 01:17