我一直在寻找这个问题的答案,我很惊讶我没有找到解决方案。我在Mac上使用Qt并希望自定义QPushbuttons和其他QWidgets,但我想保持原生外观。例如,如果我想使用样式表删除QButton的边距,我会这样做:
QPushButton btn(this);
...
btn.setStyleSheet("margin:0;");
这确实会删除边距,但它也会删除已为默认按钮设置的本机样式。当然,我只想用样式表修改边距,我该怎么做?
另外,我希望btn.styleSheet()
会返回本机样式表,但默认情况下它是空白的。只有当我设置自己的样式表时,它才会返回有效值,但仅限于我设置的属性。我得到setStyleSheet会重置样式表,但是如何修改某些属性并保留其他所有属性?
答案 0 :(得分:4)
TL; DR:不能这样做。
本机样式通常不能表示为CSS样式表,因此默认情况下styleSheet()
在所有样式上都为空。因此,遗憾的是,不可能逐个更改本机样式元素,因为通常它们是由平台API绘制的,这些API几乎不允许任何自定义。
例如,OS X和Windows上的本机调用都会绘制QPushButton
。
在边距的特定情况下,您可以通过创建代理样式来轻松解决,该样式返回较小的控制矩形和裁剪,并在将其传递给基本样式之前转换画家。这也适用于着色/颜色替换等。您基本上必须接受基本样式必须进行绘制,然后由您来调整它。