跳转到内容
新建笔记

margin、padding 与 Qt 布局间距

由内向外依次是内容、padding、border、margin:

margin:控件盒外的空间
└─ border:边框
└─ padding:边框内侧到内容的空间
└─ content:文字、图标等内容

内容、内边距、边框与外边距的盒模型示意

例如按钮文字离边框太近,应考虑 padding;多个按钮彼此太近,通常先检查布局 spacing。两者可能看似都“产生空白”,但影响的对象不同。

在内容宽为 WcW_c 的示意模型中,边框外缘宽度为:

Wb=Wc+pl+pr+bl+br.W_b=W_c+p_l+p_r+b_l+b_r.

外部再加左右 margin 才是该示意下的完整占位。Web CSS 还需考虑 box-sizing、布局算法与 margin 折叠等规则,不能把一个公式机械套给所有布局。原文旧 Internet Explorer 对照图属于历史盒宽差异,不作为当前规则。

Qt QSS 与 QLayout 分开使用

跳转到“Qt QSS 与 QLayout 分开使用”

QSS 对支持盒模型的控件提供 margin、border、padding 等样式属性,但并非完整浏览器 CSS 实现。QSS 参考

QPushButton {
padding: 6px 12px;
border: 1px solid #63758a;
border-radius: 4px;
}

布局中的外缘与控件间距由布局管理器控制:

layout->setContentsMargins(16, 16, 16, 16); // 左、上、右、下
layout->setSpacing(8); // 相邻布局项之间

contentsMargins 属于布局四边留白,spacing 属于布局项之间的距离;它们不等同于每个子控件的 QSS padding。QLayout

先用布局管理器建立结构和间距,再调控件内部 padding、字体与边框。检查不同窗口宽度、长文本、高 DPI 与键盘焦点状态。避免同时在父布局、子布局和所有控件叠加相同 margin,造成难以解释的空白。

本笔记由 CSDN 原始记录 的文字与图片重新整理;正文中的代码、适用条件与说明已按本次审读补充。