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

The*_*ght 14 c++ layout qt qt-creator qlayout

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

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

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

在此输入图像描述

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

谁能告诉我我在这里失踪了什么?

thu*_*uga 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);
}
Run Code Online (Sandbox Code Playgroud)


wal*_*ous 5

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

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

layout->setSizeConstraint(QLayout::SetMinimumSize);
Run Code Online (Sandbox Code Playgroud)

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