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

Jac*_*her 4 qt

我一直在寻找这个问题的答案,但我没有找到解决方案,这让我感到很惊讶。我正在Mac上使用Qt,并且想自定义QPushbuttons和其他QWidget,但是我也想保持本地外观。例如,如果要使用样式表删除QButton的边距,请执行以下操作:

QPushButton btn(this);
...
btn.setStyleSheet("margin:0;");
Run Code Online (Sandbox Code Playgroud)

这确实删除了边距,但同时也删除了已经为默认按钮设置的本机样式。当然,我只想使用样式表修改边距,该怎么做?

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

Rei*_*ica 5

TL; DR:不能那样做。

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

例如,QPushButtonOS X和Windows上的本地调用都绘制了一个。

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