将填充和边距设置为0无效。

3
这只是一个容器,我想在里面放置小部件并将它们隐藏和显示。我不希望它有任何边距或填充,并且它将是不可见的(没有边框,没有背景)。
我通过样式表将QWidget#container设置为margin:0px,padding:0px。 并将所有包含的小部件设置为setObjectName(“container”)。
什么也没发生。但是设置背景颜色有效,所以它被执行了。
在哪些情况下会出现这种情况? 如何解决?

http://doc.qt.digia.com/qt/stylesheet-customizing.html - UmNyobe
2个回答

3

QWidget不支持盒模型,因此它不理解填充/边距CSS指令。请使用QFrame作为容器。要查看哪些小部件支持盒模型,请查看可样式化小部件列表


请记住布局设置可能会覆盖这一设定。首先将内容边距设置为0。 - Kamil Klimek
1
是的!我来说一下,通过代码设置setMargin(0)来调整布局内部的外边距是有效的……你说的内容边距是什么意思?我原以为通过样式表将边距设置为0就可以解决问题。所以你建议我使用代码将所有布局的边距都设置为0?我不完全理解,但还是谢谢! - Darkgaze
我已经使用完全基于CSS的UI制作了项目,并且在边距/内边距方面没有任何问题。我使用了QFrames和设置内容边距为0的布局。我不知道还能对你说什么,因为显然你不理解它是如何工作的,也没有试图提供一个能够重现你的问题的代码示例。你甚至都没有说你使用的Qt版本和平台是什么。 - Kamil Klimek
但现在没有任何东西显示!它现在能正常工作了。我只是将内容边距设置为0,它就能工作了。我在样式表上没有放置任何内容。除了修复问题之外,我可以使用填充和边距吗? - Darkgaze
1
解决方案是使用 setSpacing(0)。这样,结合 setContentsMargin(0,0,0,0),可以创建原始的、无边距/内边距的布局。然后只能添加外边距,而不能添加内边距... - Darkgaze
显示剩余5条评论

2

鉴于没有简洁的答案,我将总结如下:

要创建一个没有边距和填充的容器,不要使用QWidget,而是使用QFrame,并在其上设置布局。然后将间距设置为0,并在布局上也将内容边距设置为0。使用样式表将填充/边距设置为0将没有效果。

代码:


QFrame* containerFrame = new QFrame();
QVBoxLayout* layout = new QVBoxLayout;
layout->setSpacing(0);
layout->setContentsMargins(0, 0, 0, 0);
// add some widgets to the layout
containerFrame->setLayout(layout);

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