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

  • 本文关键字:样式 设置 QWidget 属性 中为 情况下 Qt qt
  • 更新时间 :
  • 英文 :


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

QPushButton btn(this);
...
btn.setStyleSheet("margin:0;");

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

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

TL;DR:不能那样做。

原生样式通常不能表示为CSS样式表,因此styleSheet()在所有样式上默认为空。因此,不幸的是,不可能一个接一个地更改本机样式元素,因为它们通常是由平台API绘制的,几乎不允许自定义。

例如,QPushButton是由OS X和Windows上的本机调用绘制的。

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

最新更新