qt QPalette的原理与使用

QPalette类用于控制控件的风格,即任意一个地方的绘制方式。每个控件或者说qwidget对象内部都有一个QPalette对象。

在paintEvent(QPaintEvent *event)函数中,其实就是调用该控件的QPalette内容来进行绘制的了。

例如:

QStyleOptionTab opt;

opt.palette.setColor(QPalette::Button, mColors[wid]);

painter.drawControl(QStyle::CE_TabBarTabShape, opt);

调色板QPalette类包含了部件各种状态的颜色组(ColorGroup)以及颜色角色(ColorRole)两个属性。

颜色组:一个调色板包含3种状态:激活(Active),失效(Disabled)和非激活(Inactive)。Qt中的所有部件都包含一个调色板,并且使用各自的调色板来绘制它们自身,这样可以使用户界面更容易配置,也更容易保持一致。

颜色角色:用来指定该颜色所起的作用,如背景颜色或者是文本颜色等,主要的颜色角色如表所列。

qt QPalette的原理与使用_第1张图片

只要分别设置好了这两方面,那么该控件的绘制风格颜色也就确定了。

注:QPalette::Base一般也用作背景色。具体不知道一个控件哪部分属于什么角色,就在设计师界面中,选中mainwindow,属性表格中设置palette,改变调色板,自己每个颜色调整一下,看看效果就知道了。

此外,这个palette默认是子对象继承父对象的,即只要mainwindow设置了比如palette中背景色为黑色,文本颜色为白色,那么整个软件都是这种风格了,这也就是软件实现多个风格切换设置的原理。此外,qt提供了一些风格可以选择,fusion,windows,winxp,等等,可以直接用的。

参考博客:Qt-风格化_qt setstyle_Half-up的博客-CSDN博客

注:QTabBar的背景色设置中,其角色为QPalette::Button。

所以,想要实现qtabwidget的每个标签页显示不同的背景色,因为该控件乃至它的子控件QTabBar都没有提供修改标签页背景色的接口(因为QTabBar是一个widget,但是它的每个标签页却不是,而是直接画出来的,所以没有接口),所以需要我们在QTabBar的paintEvent函数里自己去画出来。关于这个可以参考这个博客:c++ - Qt TabWidget Each tab Title Background Color - Stack Overflow

这里需要注意的是,需要明确设置该tabbar控件的风格为fusion,才能生效,如下:

setStyle(QStyleFactory::create("fusion"));    

你可能感兴趣的:(qt,开发语言,qt调色板)