在布局中设置QLabel上的文本不会调整大小

时间:2013-10-10 10:39:19

标签: c++ qt layout qt-creator qlayout

在Qt创建器中使用设计器我创建了一个对话框,其中包含垂直布局中的各种小部件。其中一个小部件是QLabel,其中自动换行设置为true。 QLabel的文本在对话框显示之前设置。

QLabel的最大宽度和高度为16777215,垂直尺寸政策设置为展开,水平线为首选。我已经尝试过更改大小政策。

我遇到的问题是,如果文本很大,QLabel无法相应调整,文本被剪裁,如下所示: -

enter image description here

我尝试在设置文本后调用updateGeometry(),并尝试在垂直布局上调用update,但似乎没有任何区别。理想情况下,我希望QLabel垂直调整以适应文本。

有人能告诉我我在这里缺少什么吗?

2 个答案:

答案 0 :(得分:17)

将标签的垂直尺寸政策设定为QSizePolicy::Minimum。 然后将对话框布局的sizeconstraint设置为QLayout::SetMinimumSize。 这应该会使对话框增长,以便所有内容都适合它。

这样的事情:

QVBoxLayout *layout = new QVBoxLayout;
layout->setSizeConstraint(QLayout::SetMinimumSize);
this->setLayout(layout);
for(int i = 0; i < 5; i++)
{
    QLabel *label = new QLabel;
    label->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Minimum);
    label->setWordWrap(true);
    label->setText("This is a very long text. This is a very long text. This is a very long text. "
                   "This is a very long text. This is a very long text. This is a very long text. This is a very long text. "
                   "This is a very long text. This is a very long text.");
    layout->addWidget(label);
}

答案 1 :(得分:1)

在我的实验中,只需在包含QLabel的布局上将layoutSizeConstraint属性设置为SetMinimumSize就足以让标签展开并调整其内容。

您可以在Qt Designer中更改该属性,如果您使用它来构建UI,或者通过代码:

layout->setSizeConstraint(QLayout::SetMinimumSize);

请注意,如果您有嵌套布局,则可能需要在链中的所有布局中设置约束。不需要更改标签自己的sizePolicy - 水平和垂直尺寸政策的默认值(Preferred)应该有效,至少根据我的经验。