101 C++ 中的 Qt 样式表边距填充黑客指南。设置填充不起作用

问题描述 投票:0回答:1

经过几个月的研究和询问,我找到了将边距重置为 0、填充为 0、风格化小部件并使用 qt 中的样式表从头开始设计的解决方案。 小部件必须是其他东西的容器

101 在 qt4 中使用样式表设置小部件边距/填充的指南

  • 创建任何类型的 BoxModel 可样式小部件(不是
    QWidget
    ,而是使用
    QFrame
    !)。 检查文档
  • 为其分配正常布局。
  • 如果你不想要默认的边距,它像 apox 一样大。 8px 或多或少,你必须将布局(不是小部件,你可以,但不起作用)内容边距设置为 0:
    setContentsMargins(0,0,0,0)
  • (我不知道哪种情况),为了将所有内容都重置到极限(没有边框,什么都没有),也可以将间距设置为 0。
    setSpacing(0)
  • 将小部件对象名称设置为自定义名称:
    setObjectName("name")
  • 通过您的小部件设置更改 QFrame 的样式:
    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指南吗?

c++ qt qt4 qtstylesheets
1个回答
2
投票

填充工作

我的问题来自于我用来检查填充不起作用的类。它是 QWidget 的子类,正如文档明确指出的那样:

仅支持背景、背景剪辑和背景原点 属性。

所以我的背景属性正在工作,但我不明白为什么填充不起作用。

所以我在不知情的情况下回答了我自己的问题。

© www.soinside.com 2019 - 2024. All rights reserved.