Tob*_*old 5 c++ qt qlabel qsizepolicy qvboxlayout
我有一个QLabel在QVBoxLayout. 大多数情况下,它只有一行文本,但有时,文本可能太长而无法容纳在一行中。所以我必须启用wordWrap.
我希望标签尽可能(垂直)小,因此我设置setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Maximum).
现在,如果有足够的垂直空间,标签会更高,因为它必须只有一行:
在相同的窗口大小且未启用自动换行的情况下,标签仅占用我希望它占用的最小空间:
这也可以通过启用 wordWrap 并且独立于窗口高度来实现吗?
我尝试用一个小例子重现该行为。也许这可以帮助您解决您的问题。只需放大小部件并输入一些随机文本,其中多个单词之间用空格分隔。
QSizePolicy这个想法是不仅对QLabel,而且对其他 GUI 元素使用正确的 s 组合。
#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();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
959 次 |
| 最近记录: |