簡體   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