顶级Qt组件在其内容增长时不会扩展

时间:2016-09-20 12:10:36

标签: qt user-interface

在Qt中,当小部件的内容增长时(例如通过在其布局中添加更多小部件),我希望窗口相应增长。这甚至在官方教程中记录为window extension

在我特定的代码片段中,我可以看到此扩展名不会发生。相反,窗口保持其原始大小,内容被粉碎。

#include <QWidget>
#include <QVBoxLayout>
#include <QPushButton>
#include <QLabel>

class TestDialog : public QWidget
{
  Q_OBJECT
public:
  TestDialog() {
    layout = new QVBoxLayout;
    QLabel* lbl = new QLabel("This is a long label that word wraps");
    lbl->setWordWrap(true); // This line causes the problem
    layout->addWidget(lbl);
    QPushButton* btn = new QPushButton("Push me");
    layout->addWidget(btn);
    setLayout(layout);
    connect(btn, SIGNAL(clicked()), this, SLOT(addLabel()));
  }

private slots:
  void addLabel() {
    layout->addWidget(new QLabel("hey!"));
  }

private:
  QVBoxLayout* layout;
};
int main(int argc, char *argv[])
{
  QApplication app(argc, argv);
  TestDialog* dialog = new TestDialog;
  dialog->show();
  return app.exec();
}

初始状态:

Base

点击按钮后的预期行为:

enter image description here

点击按钮后的实际行为:

enter image description here

当删除对setWordWrap的调用时,问题就消失了,但当然这不是我想要的,因为我需要保持自动换行为。

此外,当我用包含描述的Qlabel替换包QCommandLinkButton时,我也会看到相同的行为(描述文本也有自动换行行为)。

如何将窗口扩展行为与自动换行行为结合起来?

1 个答案:

答案 0 :(得分:0)

您可以通过更改标签小部件的大小政策来实现此目的。

lbl->setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum));

但我不确定问题的原因是什么。