经过几个月的研究和询问,我找到了将边距重置为 0、填充为 0、风格化小部件并使用 qt 中的样式表从头开始设计的解决方案。 小部件必须是其他东西的容器。
101 在 qt4 中使用样式表设置小部件边距/填充的指南
QWidget
,而是使用 QFrame
!)。 检查文档setContentsMargins(0,0,0,0)
。 setSpacing(0)
setObjectName("name")
。QFrame#name { things... }
如果您想对自定义小部件进行样式化并且您有一个自定义类名称,并且您打算使用类的名称而不是使用
setObjectName
,请添加这个小技巧来重新实现您的绘制方法,其中包含在 Qt 样式表文档示例中。
如果你是QWidget的子类,你需要提供一个paintEvent 您的自定义 QWidget 如下:
void CustomWidget::paintEvent(QPaintEvent *) { QStyleOption opt; opt.init(this); QPainter p(this); style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this); }
如果没有设置样式表,上面的代码是无操作的。
警告:确保您为您的自定义定义了 Q_OBJECT 宏 小部件。
然后您可以使用类名创建样式。
ClassName {}
现在,我遇到了一个严重的问题,我与其他人分享了这个问题,但我没有解决方案。 填充根本不起作用。只有边距才起作用。
那么
ClassName
{ padding: 200px; margin: 5px; }
与
相同ClassName
{ margin: 5px; }
当您必须创建带有边距的子容器来添加填充时,这会带来麻烦的情况。这给我们带来了无限的层次结构......这根本不可取。
有人知道如何完整完成我的101指南吗?
填充工作
我的问题来自于我用来检查填充不起作用的类。它是 QWidget 的子类,正如文档明确指出的那样:
仅支持背景、背景剪辑和背景原点 属性。
所以我的背景属性正在工作,但我不明白为什么填充不起作用。
所以我在不知情的情况下回答了我自己的问题。