C++ 仅为一种小部件设置样式

C++ 仅为一种小部件设置样式,c++,qt,C++,Qt,如何全局更改一种特定类型的小部件的样式?我想让所有QGroupBox实例都使用“plastique”样式,因为它有一个漂亮的边框: 左边是GTK风格(我不喜欢);右边是我想要的款式 (来源:) (来源:) 我不想为程序中QGroupBox的每个实例设置样式,我想像QApplication::setStyle()一样全局设置样式,但只针对QGroupBox。有办法吗 谢谢。您可以使用qss文件来实现这一点;它们是Qt元素的样式表。如前所述 在qss中,您可以为QGroupBox类指定样式,类似

如何全局更改一种特定类型的小部件的样式?我想让所有QGroupBox实例都使用“plastique”样式,因为它有一个漂亮的边框:

左边是GTK风格(我不喜欢);右边是我想要的款式


(来源:)


(来源:)

我不想为程序中QGroupBox的每个实例设置样式,我想像QApplication::setStyle()一样全局设置样式,但只针对QGroupBox。有办法吗


谢谢。

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

qss
中,您可以为
QGroupBox
类指定样式,类似于在
css
中为HTML网站指定样式的方式。

您必须在要重新设置样式的小部件上使用该功能

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

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


您也可以使用。请注意,自定义样式目前不支持这些功能。

我知道如何自定义小部件类型的各个元素(这几乎是我想要的),但我不知道如何更改样式。我的意思是,很难调整所有这些小部件元素来模仿它们的外观。你是什么意思?如果您只是为该类指定样式,那么该类的所有单个元素都将获得该样式。但是我怎么能在css中说“请,使用塑料风格”呢?谢谢。我担心这是唯一的解决办法。遗憾的是,每个QWidget子类都没有静态的setStyle(我想从实现的角度来看,这是不现实的)。你的想法好像是在CSS中(你可以设置“类”的样式),不是吗?正如你所说,在这里实现是非常不现实的。如果我理解的话,你可以为“类”应用样式表css。例如:“QLineEdit{background:yellow}”指定所有QLineEdit都应使用黄色作为背景色,如文档中所述。我只是不能说“QLineEdit{style:'plastique'}”之类的话。那太完美了。不,那是不可能的,因为样式表是由样式解析和解释的;例如,如果设置样式表
QLineEdit{background:yellow}
,则基础样式(可能
qwindowstyle
QPlastiqueStyle
)将更改其绘制线条编辑的方式;这就是为什么您可以在qss中选择样式。您可以使用qss创建一个完整的“样式”,即选择一个随处可用的样式(例如
QPlastiqueStyle
),并创建一个qss来更改每个可能的小部件的外观。
class MyGroupBox: public QGroupBox
{
    public:
        MyGroupBox(QWidget* parent) : QGroupBox(parent)
        {
            setStyle(/* the style you want */);
        }
};