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

时间:2014-01-15 12:28:52

标签: c++ qt qt4 stylesheet qtstylesheets

经过几个月的研究并在这里询问后,我发现了一个解决方案,让边距重置为0,填充为0,样式化小部件并从头开始使用qt中的样式表设计。 小部件必须是其他东西的容器

101 qt4中使用样式表的样式窗口小部件边距/填充指南

  • 创建任何类型的BoxModel样式小部件(不是QWidget,而是使用QFrame!)。 Check documentation
  • 为其指定正常布局。
  • 如果你不想要默认的边距,那么它就像天花一样大。 8px或多或少,你必须设置布局(不是小部件,你可以,但不起作用)内容边距为0:setContentsMargins(0,0,0,0)
  • 可选(我不知道哪些情况),将所有内容都置于极端重置状态(无边框,根本没有任何内容),也将间距设置为0。 setSpacing(0)
  • 将窗口小部件对象名称设置为自定义名称:setObjectName("name")
  • 根据您的小部件设置您的样式更改QFrame:QFrame#name { things... }

如果您要对自定义窗口小部件进行样式化,并且您有自定义类名称,并且您打算使用该类的名称而不是使用setObjectName,请添加此小hack重新实现您的绘制方法,该方法包含在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指南吗?

1 个答案:

答案 0 :(得分:2)

填充作品,我在自己的问题中回答了这个问题。

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

  

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

所以我的背景属性正在运行,我不明白为什么填充没有。

所以我在不知情的情况下回答了我自己的问题。 我认为这是添加到Wiki的很好的资源。有人可以帮我解决这个问题吗?