为单个小部件设置样式

3
我该如何全局更改一种特定类型的小部件的样式?我想让所有的QGroupBox实例都使用“plastique”样式,因为它有漂亮的边框:
左边是GTK样式(我不喜欢);右边是我想要的样式。 Plastique style (来源: qt-project.org) Plastique style (来源: qt-project.org) 我不想为程序中每个QGroupBox实例设置样式,我想像在QApplication :: setStyle()中全局设置,但只针对QGroupBox。有办法吗?

谢谢。

2个回答

0

您需要使用QWidget::setStyle函数,对您想要重新设置样式的小部件进行操作。

如果您希望所有分组框都具有相同的样式,则可以创建一个子类并仅使用它(没有更简单的方法来重新设置相同小部件类型的所有实例):

class MyGroupBox: public QGroupBox
{
    public:
        MyGroupBox(QWidget* parent) : QGroupBox(parent)
        {
            setStyle(/* the style you want */);
        }
};

另一个不太方便的选项是遍历小部件树,并根据小部件的类名设置样式。

您还可以使用Qt样式表。请注意,目前不支持这些与自定义样式配合使用。


谢谢。我担心这是唯一的解决方案。很遗憾每个QWidget子类没有静态setStyle(从实现角度来看,这可能相当不切实际)。 - Monfico
看起来你的思路像在 CSS 中(可以为“类”设置样式),是吗?正如你所说,这在实现上非常不现实。 - Synxis
如果我理解正确,可以为“类”应用样式表CSS。例如:“QLineEdit { background: yellow }”指定所有QLineEdits应使用黄色作为其背景颜色,如文档中所述。但我无法像这样说:“QLineEdit { style: 'plastique' }”。那将是完美的。 - Monfico
不,这是不可能的,因为样式表是由样式解析和解释的;例如,如果您设置样式表QLineEdit { background: yellow },底层样式(可能是QWindowsStyleQPlastiqueStyle)将改变绘制行编辑的方式;这就是为什么您可以在qss中选择样式。您可以使用qss创建整个“样式”,即选择全局可用的样式(如QPlastiqueStyle)并创建一个qss来更改每个可能窗口小部件的外观。 - Synxis

0

您可以使用qss文件来实现这一点;它们是Qt元素的样式表。如此处所述。

在您的qss中,您可以为QGroupBox类指定一个样式,就像在HTML网站中使用css一样。


我知道如何自定义小部件类型的各个元素(几乎是我想要的),但我不知道如何仅更改样式。我的意思是,很难调整所有这些小部件元素以模仿它们在某种样式下的外观。 - Monfico
什么意思?如果你只是为那个类指定一个样式,那个类的所有单独元素都会得到那个样式。 - Lee White
我可以为一个类指定样式表,没问题。但是在CSS中,我怎么说“请使用plastique样式”? - Monfico

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接