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中的所有部件都包含一个调色板,并且使用各自的调色板来绘制它们自身,这样可以使用户界面更容易配置,也更容易保持一致。
颜色角色:用来指定该颜色所起的作用,如背景颜色或者是文本颜色等,主要的颜色角色如表所列。
只要分别设置好了这两方面,那么该控件的绘制风格颜色也就确定了。
注: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,才能生效,如下:文章来源:https://www.toymoban.com/news/detail-643916.html
setStyle(QStyleFactory::create("fusion")); 文章来源地址https://www.toymoban.com/news/detail-643916.html
到了这里,关于qt QPalette的原理与使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!