17

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

QLabel 的最大宽度和高度为 16777215,垂直尺寸策略设置为Expanding,水平方向为Preferred。我试过改变尺寸政策。

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

在此处输入图像描述

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

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

4

2 回答 2

20

将标签的垂直 sizepolicy 设置为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);
}
于 2013-10-10T11:43:19.480 回答
2

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

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

layout->setSizeConstraint(QLayout::SetMinimumSize);

请注意,如果您有嵌套布局,则可能需要在链上的所有布局中设置约束。不需要更改标签本身的sizePolicy内容——默认值(Preferred水平和垂直大小策略)应该可以工作,至少根据我的经验。

于 2017-05-16T12:29:40.923 回答