我在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"};
,我会得到这个:
...这是丑陋的(在所有布局上水平居中和扩展)。
如果我设置QStringList texts{"1\nok",...,"24\nok"};
,我会得到这个:
......这似乎很好。
最后,如果我设置QStringList texts{"1\nok",...,"36\nok"};
,我会得到这个:
...这是非常糟糕,乱码等。
所以,问题是:有没有办法解决这个问题,即在布局上以某种方式禁用这种“缩小到适合”?默认按钮大小就可以了 我想利用QScrollArea的垂直滚动功能,而不是填充(限制)可用空间中的所有按钮......
答案 0 :(得分:1)
所以,问题是:有没有办法解决这个问题,即禁用 不知怎的,这个&#34;缩小到适合&#34;在布局上?默认按钮大小 会没事的。
在我的头顶,可以设置每个按钮的最小尺寸。可以从字体计算出最小尺寸(但首先只需设置最小尺寸)。
这是reference。您会注意到minimumSize优先于布局。它也可能会更改SizePolicy,您也可以查看它。我建议你和设计师一起玩,因为它尊重尺寸和布局。人们可以从中学习分配。
另请查看minimumSizeHint,因为布局与此交互。另请参阅MasterBLB的评论here
答案 1 :(得分:1)
如果您只是将子窗口小部件添加到QScrollArea
,则不会进行任何滚动,因为这些窗口小部件不以任何方式由该区域管理。您需要使用QScrollArea::setWidget
来设置小部件:
widget = new ButtonWidget;
ui->frame->setWidget(widget);