【问题标题】:Qt: How to disable the "shrink-to-fit" for a QGridLayout? [duplicate]Qt:如何禁用 QGridLayout 的“缩小以适应”? [复制]
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    所以,问题是:有没有办法解决这个问题,即禁用 不知何故,这种“缩小以适应”布局?默认按钮大小 就好了。

    在我的脑海中,可以设置每个按钮的最小尺寸。可以从字体中计算出最小尺寸应该是多少(但首先只是设置最小尺寸)。

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

    同时查看 minimumSizeHint,因为布局与此交互。另见MasterBLB的cmetshere

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-23
      • 2011-11-24
      • 1970-01-01
      • 2018-05-25
      • 2020-12-21
      相关资源
      最近更新 更多