【发布时间】:2016-04-22 11:27:29
【问题描述】:
我在 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 的垂直滚动功能,而不是在(有限的)可用空间中填充和填充所有按钮......
【问题讨论】:
-
如果重复的问题不能满足您的需要,请告诉我们。
-
@KubaOber:我修改了您的代码并且它可以工作,但是......(一如既往有一个 but)我无法将按钮分组,每行只有 5 个(如上所述...)。像在您的示例中一样,所有按钮都排在一行...如果我更改为
new QVBoxLayout(this);,所有按钮都排在一列(显然)...知道我能做什么...获得 5 个按钮/行?提前致谢! -
也许没有某种网格布局是不可能的......?所以,我想我的问题毕竟不是重复的......有一些相似的方面,但也有一些差异(我的拙见)。
-
改用
QGridLayout:) -
重复的问题使用
QBoxLayout,但答案应该适用于任何布局。只需使用你想要的布局,你就会被设置。如果您希望按钮像文本一样重排,以便列数会随着QScrollArea大小的调整而改变,您应该使用FlowLayout示例。如果您发现要添加的重要内容,也可以随意添加您对其他问题的答案。
标签: qt user-interface button layout widget