繁体   English   中英

启用 wordWrap 的 QLabel 的垂直大小

[英]Vertical size of a QLabel with wordWrap enabled

我在QVBoxLayout有一个QLabel 大多数情况下,它只有一行文本,但有时,文本可能太长而无法容纳在一行中。 所以我必须启用wordWrap

我希望标签尽可能(垂直)小,因此我设置了setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Maximum)

现在,如果有足够的垂直空间,标签会更高,因为它必须只有一行:

启用 wordWrap 的标签

在相同的窗口大小和没有启用 wordWrap 的情况下,标签只占用我希望它占用的最小空间:

没有自动换行的标签

这也可以通过启用 wordWrap 并独立于窗口高度来实现吗?

我试图用一个小例子重现这种行为。 也许这可以帮助您解决您的问题。 只需放大小部件并键入一些由空格分隔的几个单词的随机文本。

这个想法是使用QSizePolicy的正确组合不仅用于QLabel ,还用于其他 GUI 元素。

#include <QFrame>
#include <QLabel>
#include <QGroupBox>
#include <QLineEdit>
#include <QHBoxLayout>
#include <QPushButton>
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    auto frame = new QFrame;
    frame->setLayout(new QVBoxLayout);
    auto groupEdit = new QGroupBox;
    groupEdit->setLayout(new QHBoxLayout);
    auto edit = new QLineEdit;  
    groupEdit->layout()->addWidget(edit);
    frame->layout()->addWidget(groupEdit);
    auto group = new QGroupBox;
    frame->layout()->addWidget(group);
    group->setLayout(new QHBoxLayout);
    auto label = new QLabel;
    groupEdit->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
    group->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
    group->layout()->addWidget(label);
    group->layout()->addWidget(new QPushButton);
    QObject::connect(edit, &QLineEdit::textEdited, [&](const QString& text) {
        label->setText(text);
        label->setWordWrap(true);
    });
    frame->show();
    return a.exec();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM