请问一个layout的问题

foxpicobsd 2011-09-07 01:21:24
我需要在一个QWidget里面现实一个QLabel, 要求就是这个label能自动水平居中,垂直顶满到widget的上下边
我在widget里面加了个QHBoxLayout,layout里面放了一个qlabel,
基本代码都在widget的构造器里,如下

setAutoFillBackground(true);
setFixedSize(350,40);
label = new QLabel(tr("Previews"));
label->setStyleSheet("font: 18px; border :1px solid black; border-bottom-right-radius: 5px; border-bottom-left-radius: 5px; padding: 0px 16px 0px 16px");
mainLayout = new QHBoxLayout;
mainLayout->addWidget(label,0, Qt::AlignCenter);
setLayout(mainLayout);
结果出来的效果是这样的,水平没问题,但是垂直上没有顶满到容器的边缘,请看


于是我就把这个label的高度设定为容器的高度(label->setFixedHeight(40)),可是又变成了这样


请高手指点下应该怎么改才能达到我要得效果

...全文
243 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
李泽润bodhi 2011-09-16
  • 打赏
  • 举报
回复
问题解决了吗?
yzhj2005 2011-09-14
  • 打赏
  • 举报
回复
mainLayout->setContentsMargins(0,0,0,0);
炽热恒星 2011-09-11
  • 打赏
  • 举报
回复
不懂,顶顶。
sczvip 2011-09-10
  • 打赏
  • 举报
回复
加弹簧
Anitee 2011-09-08
  • 打赏
  • 举报
回复
setFixedSize()是不能改变大小的
wangmeiling0110 2011-09-08
  • 打赏
  • 举报
回复
是的,纯代码的太复杂啦
李泽润bodhi 2011-09-07
  • 打赏
  • 举报
回复
label ->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);

原因可能是你没有设置label的伸展策略。好好查看一下setSizePolicy函数吧
foxpicobsd 2011-09-07
  • 打赏
  • 举报
回复
不好意思确实是我没看仔细
我又尝试了一下 mainLayout->setContentMargin(0,0,0,0)
还是不行,
不过我似乎有新发现,我把作为container的这个widget的setFixedSize(350,40);去掉,
这个widget就紧紧地包住这个label了,这是为什么呢?,能不能设定让这个label在垂直方向总是stretch呢
还请麻烦再指点一下,



Lutx 2011-09-07
  • 打赏
  • 举报
回复
用Qt的Designer来设计吧, 会简单一些
dbzhang800 2011-09-07
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 foxpicobsd 的回复:]

label->setContentsMargins(0,0,0,0);
mainLayout->setSpacing(0);

都试过了,还是不行,不明白为什么,setSpacing是肯定不行,这个对于hboxlayout职能设置水平space
[/Quote]
这个?
你还没发现我给的manual链接以及3楼给你的语句,和你这儿试的是不同的东西么?
foxpicobsd 2011-09-07
  • 打赏
  • 举报
回复
label->setContentsMargins(0,0,0,0);
mainLayout->setSpacing(0);
都试过了,还是不行,不明白为什么,setSpacing是肯定不行,这个对于hboxlayout职能设置水平space
中才德创 2011-09-07
  • 打赏
  • 举报
回复
mainLayout->setContentsMargins(0,0,0,0)试试?
dbzhang800 2011-09-07
  • 打赏
  • 举报
回复
似乎应该是contentsMargins设置问题

http://doc.qt.nokia.com/4.7/qlayout.html#setContentsMargins
dext 2011-09-07
  • 打赏
  • 举报
回复
QLayout::spacing : int

This property holds the spacing between widgets inside the layout.

If no value is explicitly set, the layout's spacing is inherited from the parent layout, or from the style settings for the parent widget.

For QGridLayout and QFormLayout, it is possible to set different horizontal and vertical spacings using setHorizontalSpacing() and setVerticalSpacing(). In that case, spacing() returns -1.

Access functions:
int spacing () const
void setSpacing ( int )
foxpicobsd 2011-09-07
  • 打赏
  • 举报
回复
还是不行啊,我调用了 label->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::MinimumExpanding); 其他的标志也都设定了
最奇怪的是, 我调用label->height() 看高度,总是480。
实在不明白

16,216

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧