仅为一种小部件设置样式
Posted
技术标签:
【中文标题】仅为一种小部件设置样式【英文标题】:Setting style for only one kind of widget 【发布时间】:2013-04-17 19:16:01 【问题描述】:如何全局更改一种特定类型小部件的样式?由于那个漂亮的边框,我想让所有 QGroupBox 实例都使用“plastique”样式:
左边是 GTK 风格(我不喜欢);右边是我想要的样式。
(来源:qt-project.org)
(来源:qt-project.org)
我不想为程序中的每个 QGroupBox 实例设置样式,我想像在 QApplication::setStyle() 中一样全局设置它,但仅适用于 QGroupBox。有什么办法吗?
谢谢。
【问题讨论】:
【参考方案1】:您必须在要重新设置样式的小部件上使用QWidget::setStyle
函数。
如果您希望所有组框都具有相同的样式,您可以创建一个子类并仅使用它(没有最简单的方法来重新设置相同小部件类型的所有实例的样式):
class MyGroupBox: public QGroupBox
public:
MyGroupBox(QWidget* parent) : QGroupBox(parent)
setStyle(/* the style you want */);
;
另一个不太方便的选择是遍历widget树,根据widget的类名设置样式。
您也可以使用Qt Style Sheets。请注意,目前自定义样式不支持这些。
【讨论】:
谢谢。我担心这是唯一的解决方案。很遗憾,每个 QWidget 子类都没有静态 setStyle (我猜从实现的角度来看这是非常不现实的)。 看来您的想法就像在 CSS 中一样(您可以在其中设置“类”的样式),不是吗?正如你所说,这里的实现是非常不现实的。 如果我理解,可以将样式表 css 应用于“类”。例如:“QLineEdit background: yellow ”指定所有 QLineEdits 都应使用黄色作为其背景颜色,如文档中所述。我只是不能说“QLineEdit style: 'plastique' ”之类的话。那将是完美的。 不,这是不可能的,因为样式表是由样式解析和解释的;例如,如果您设置样式表QLineEdit background: yellow
,则底层样式(可能是QWindowsStyle
或QPlastiqueStyle
)将改变它绘制线条编辑的方式;这就是为什么您可以在 qss 中选择样式的原因。您可以使用 qss 制作一个完整的“样式”,即选择一种随处可用的样式(例如 QPlastiqueStyle
)并制作一个可以更改每个可能小部件外观的 qss。【参考方案2】:
您可以为此使用qss
文件;它们是 Qt 元素的样式表。如解释here
在qss
中,您可以为QGroupBox
类指定样式,类似于在css
中为html 网站指定的样式。
【讨论】:
我知道如何自定义小部件类型的单个元素(这几乎是我想要的),但我看不到如何更改样式。我的意思是,很难调整所有这些小部件元素以以某种风格模仿它们的外观。 什么意思?如果您只是为该类指定样式,则该类的所有单个元素都将获得该样式。 我可以为一个类指定一个样式表,好的。但是我怎么能在 css 中说“拜托,请使用样式 plastique”?以上是关于仅为一种小部件设置样式的主要内容,如果未能解决你的问题,请参考以下文章