2013-12-18 216 views
3

我正在尝试使用QtCreator创建一个GUI。对于这个图形用户界面,我需要显示几张不同大小的图像。这些图像应该互相接触。QHBoxLayout中的部件之间的间距

我使用QWidgetQHBoxLayout,其中我添加包含图像的标签(不同大小)。

根据相关问题,我应该使用setSpacingsetContentsMargin来删除这些空格,但这不行;我试了几次。

下面的代码:

QWidget *widget = new QWidget(ui->tagcloud); 
QHBoxLayout * l = new QHBoxLayout(widget); 
ui->tagcloud->setWidget(widget); 

for(int i=0;i<list.size();++i) 
{ 
    QLabel *lab = new QLabel; 

    QPixmap pic((list[i].imgPath).c_str());  //This fetches the image 
    int sizeChange = 50 + (2*list[i].percent); //Calculates the size of the image 

    lab->setFixedSize(QSize(sizeChange, sizeChange)); 
    lab->setPixmap(pic); 
    lab->setScaledContents(true); 

    l->addWidget(lab); 
    l->setSpacing(0); 

} 

然而,当我运行此,间距保持不变(即绝对不是零)。 如果我在布局中添加更多标签,间距似乎变小。

任何人都可以解释或帮助我吗?谢谢!

+1

setSpacing(N)设定*最小*像素的数QBoxLayout必须放置在项目之间。但是,如果QBoxLayout有额外的空间来填充,它可以放置更多的像素比项目之间的像素。 (顺便说一下,你只需要调用setSpacing(0)一次 - 在for循环的每次迭代中调用它都不会受到影响,但它也没有任何区别) –

+0

感谢解释,现在一切都变得有意义了:) – Tcanarchy

回答

7

设置间距为0,工程前后分别增加拉伸对我来说:

l->addStretch(); 
for(int i = 0; i < list.size(); ++i) 
{ 
    QLabel *lab = new QLabel; 

    QPixmap pic((list[i].imgPath).c_str());  //This fetches the image 
    int sizeChange = 50 + (2*list[i].percent); //Calculates the size of the image 

    lab->setFixedSize(QSize(sizeChange, sizeChange)); 
    lab->setPixmap(pic); 
    lab->setScaledContents(true); 

    l->addWidget(lab); 
} 
l->addStretch(); 

l->setSpacing(0); 

而且这个作品我觉得

l->setSizeConstraint(QLayout::SetMaximumSize); 
+0

非常感谢! 这正是我需要的。 – Tcanarchy

+0

很高兴它有帮助。我经常倒下来拉伸自己^^ – Pluc