我希望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);
}
此代码显示蓝框不会扩展到整个宽度,为什么?
答案 0 :(得分:8)
您必须设置:
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();
}