Qt 如何在QWidget中设置或更改特定的样式表属性,而不重置整个样式表?

Qt 如何在QWidget中设置或更改特定的样式表属性,而不重置整个样式表?,qt,Qt,我一直在寻找这个问题的答案,但我很惊讶我没有找到解决办法。我在Mac上使用Qt,希望定制QPushbuttons和其他QWidget,但我也希望保持原生外观。例如,如果我想使用样式表删除QButton的边距,我会: QPushButton btn(this); ... btn.setStyleSheet("margin:0;"); 这确实会删除边距,但也会删除已为默认按钮设置的本机样式。当然,我只想使用样式表修改页边距,我该怎么做 另外,我希望btn.styleSheet()将返回本机样式表,

我一直在寻找这个问题的答案,但我很惊讶我没有找到解决办法。我在Mac上使用Qt,希望定制QPushbuttons和其他QWidget,但我也希望保持原生外观。例如,如果我想使用样式表删除QButton的边距,我会:

QPushButton btn(this);
...
btn.setStyleSheet("margin:0;");
这确实会删除边距,但也会删除已为默认按钮设置的本机样式。当然,我只想使用样式表修改页边距,我该怎么做


另外,我希望
btn.styleSheet()
将返回本机样式表,但默认为空。只有当我设置自己的样式表时,它才会返回有效值,但仅针对我设置的属性。我知道setStyleSheet会重置样式表,但如何修改某些属性并保持其他属性不变?

TL;医生:不能那样做

本机样式通常不能表示为CSS样式表,因此默认情况下,所有样式上的
styleSheet()
都为空。因此,不幸的是,不可能一个接一个地更改本机样式元素,因为它们通常是由平台API绘制的,这些API几乎不允许任何定制

例如,OSX和Windows上的本机调用都会绘制一个
QPushButton

但是,在边距的特定情况下,可以通过创建代理样式轻松解决问题,该代理样式返回较小的控制矩形,并在将画师传递给基础样式之前对其进行裁剪和变换。这也适用于着色/颜色替换等。您基本上必须接受基本样式必须绘制图形,然后由您来调整它