问:如何禁用QGridLayout的“缩小到适合度”?

时间:2016-04-22 11:27:30

标签: c++ qt

我在Windows7上使用Qt5 在我当前的应用程序中,我尝试显示和删除一些按钮。

widget = new ButtonWidget(ui->frame); // frame is a QScrollArea
connect(ui->addBtns,    SIGNAL(clicked()), widget, SLOT(addButtons()));
connect(ui->deleteBtns, SIGNAL(clicked()), widget, SLOT(deleteButtons()));

ButtonWidget课在这里:

ButtonWidget::ButtonWidget(QWidget * parent) : QWidget(parent)
{
   gridLayout = new QGridLayout(parent);
}

static QStringList texts{...}; // various content (see explanations below)

void ButtonWidget::addButtons()
{
    for(auto i = 0; i < texts.size(); i++)
    {
        gridLayout->addWidget(new QPushButton(texts[i], this), i / 5, i % 5);
    }
}

void ButtonWidget::deleteButtons()
{
    while(gridLayout->count())
    {
        delete gridLayout->itemAt(0)->widget();
    }
}

如果我设置QStringList texts{"1\nok"};,我会得到这个:
enter image description here
...这是丑陋的(在所有布局上水平居中和扩展)。

如果我设置QStringList texts{"1\nok",...,"24\nok"};,我会得到这个:
enter image description here
......这似乎很好。

最后,如果我设置QStringList texts{"1\nok",...,"36\nok"};,我会得到这个:
enter image description here
...这是非常糟糕,乱码等。

所以,问题是:有没有办法解决这个问题,即在布局上以某种方式禁用这种“缩小到适合”?默认按钮大小就可以了 我想利用QScrollArea的垂直滚动功能,而不是填充(限制)可用空间中的所有按钮......

2 个答案:

答案 0 :(得分:1)

  

所以,问题是:有没有办法解决这个问题,即禁用   不知怎的,这个&#34;缩小到适合&#34;在布局上?默认按钮大小   会没事的。

在我的头顶,可以设置每个按钮的最小尺寸。可以从字体计算出最小尺寸(但首先只需设置最小尺寸)。

这是reference。您会注意到minimumSize优先于布局。它也可能会更改SizePolicy,您也可以查看它。我建议你和设计师一起玩,因为它尊重尺寸和布局。人们可以从中学习分配。

另请查看minimumSizeHint,因为布局与此交互。另请参阅MasterBLB的评论here

答案 1 :(得分:1)

如果您只是将子窗口小部件添加到QScrollArea,则不会进行任何滚动,因为这些窗口小部件不以任何方式由该区域管理。您需要使用QScrollArea::setWidget来设置小部件:

widget = new ButtonWidget;
ui->frame->setWidget(widget);