在设置qss样式的过程中发现,QTabWidget的tabbar右侧空白区域的颜色总是无法设置,也就是tabbar的背景色。tab有自己的背景,容纳tab的区域,如下图标记所示:
经查找资料,各种关键词搜索发现,这片区域是QTabWidget的背景区域,按正常套路可以通过stylesheet中的background属性控制,我尝试设置background却发现并不起作用。
因为QTabWidget是继承于QWidget的,而在stylesheet文档中有这么一段话:
【此图片信息来自lilong(DLC)的文章】
这段资料告诉我们,如果小部件继承自Qwidget类,一些stylesheet是无法直接控制的。需要重写paintEvent函数,把样式表选项绑定到小部件上。QT的工程师可能觉得有些常用的stylesheet属性都这样写肯定麻烦。
所以直接给我们丢出了一个接口和宏变量。我们可以直接通过这个接口设置需要添加的宏常量属性。而这个接口其实就是我们常常见到的Qt::WidgetAttribute方法。而宏常量是一个枚举类型,可以在QT帮助里搜索这些宏常量,如图:
当我们设置QWidget::setAttribute(Qt::WA_StyledBackground)后,我们就给小部件添加绑定了qss控制。实例如图:
代码片段:
//C++代码中
//给stylesheet添加qt的私有属性
tabWidget->setAttribute(Qt::WA_StyledBackground);
//加载默认样式表,loadStyleSheet为自定义的样式加载方法
this->loadStyleSheet(":styleSheet/default.qss");
//Qss文件中:
QTabWidget{
background-color:rgb(64, 65, 66);
font:14px;
font-family: "Microsoft YaHei";
font-weight:bold;
qproperty-iconSize:20px 20px;
}