如何使QLabel扩展到全宽?

12

我希望一个 QLabel 可以根据容器的宽度自动调整大小,无论内容是什么。(我希望这样做是因为我会动态设置文本并在后面添加小部件,导致标签无法完全显示文本)

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    this->setFixedSize(100,100);
    QHBoxLayout *layout = new QHBoxLayout;
    this->setLayout(layout);
    QLabel *label = new QLabel;
    label->setStyleSheet("background-color:blue");
    label->setSizePolicy(QSizePolicy::MinimumExpanding, 
                         QSizePolicy::MinimumExpanding);
    label->setText(tr("test"));
    layout->addWidget(label, 0, Qt::AlignTop | Qt::AlignLeft);
}

这段代码显示蓝色的方框没有展开到整个宽度,为什么?

1个回答

12

您必须设置:

layout->setContentsMargins(0,0,0,0);

默认情况下,每个QWidget或QFrame在每个方向上添加15像素的边距。

主要问题是在将小部件添加到布局时设置对齐方式。请改用label->setAlignment

layout->addWidget(label);
我编译了你的代码,它在那些更改下工作。
这是一个最简化的例子:
#include <QApplication>
#include <QtGui>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QWidget* w = new QWidget;
    w->setFixedSize(100,100);
    QHBoxLayout* layout = new QHBoxLayout;
    layout->setContentsMargins(0,0,0,0);
    w->setLayout(layout);
    QLabel* label = new QLabel;
    label->setAlignment(Qt::AlignTop | Qt::AlignLeft);
    label->setContentsMargins(0,0,0,0);
    label->setStyleSheet("background-color:blue");
    label->setSizePolicy(QSizePolicy::MinimumExpanding,
                     QSizePolicy::MinimumExpanding);
    label->setText("test");
    layout->addWidget(label);
    w->show();
    return a.exec();
}

1
编辑应该能够解决您的问题。 - Kirell
1
哦,你说得对。问题确实是由于对齐方式引起的。 - chacham15
1
我刚刚添加了真正的修复,谢谢 :) - chacham15

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接