启用 wordWrap 的 QLabel 的垂直大小
Vertical size of a QLabel with wordWrap enabled
我在 QVBoxLayout
中有一个 QLabel
。大多数时候,它只有一行文本,但有时,文本可能太长而无法放在一行中。所以我必须启用 wordWrap
.
我希望标签尽可能(垂直)小,因此我设置了 setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Maximum)
。
现在,如果有足够的垂直 space,标签会更高,因为它必须只有一行:
在相同 window 大小且未启用 wordWrap 的情况下,标签仅采用最小值 space 我希望它采用:
这也可以通过启用 wordWrap 并独立于 window 高度来实现吗?
我试图用一个小例子重现该行为。也许这可以帮助您解决问题。只需放大小部件并键入一些由空格分隔的几个单词的随机文本。
我们的想法是使用 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();
}
我在 QVBoxLayout
中有一个 QLabel
。大多数时候,它只有一行文本,但有时,文本可能太长而无法放在一行中。所以我必须启用 wordWrap
.
我希望标签尽可能(垂直)小,因此我设置了 setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Maximum)
。
现在,如果有足够的垂直 space,标签会更高,因为它必须只有一行:
在相同 window 大小且未启用 wordWrap 的情况下,标签仅采用最小值 space 我希望它采用:
这也可以通过启用 wordWrap 并独立于 window 高度来实现吗?
我试图用一个小例子重现该行为。也许这可以帮助您解决问题。只需放大小部件并键入一些由空格分隔的几个单词的随机文本。
我们的想法是使用 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();
}