Qt样式(qss)应用到QMdiArea不生效的解决
背景:
之前写记录过几篇qss相关内容:
Qt样式(qss)手册小结(附例:软件深色模式)
Qt样式(qss)使用小结(软件换肤,比如暗黑模式)
Qt样式(qss)的几套配色方案
今天偶然想改一下QMdiArea的背景颜色,突然发现不好用。于是着手处理。
网上查了很多,基本轻描淡写,也许这问题对于大家都太简单了,不屑一顾。但这里我要记录下来,以备之后查询。
解决:
我是这样解决的:先打开主窗体,选中那个mdiArea部件,按F1看帮助手册。或者从cpp文件里找到“ui_”开头的头文件点进去,或者从主窗体构造函数的setupUi函数点进去也一样。总之就是找到QMdiArea这个类相关的地方,再按F1。主要目的是看手册。
手册中找到“List of all members, including inherited members”看看它都支持那些函数。其实我原本想找到setStyleSheet来着,原本想看看它有什么不一样。
结果我找到了setStyle(QStyle *),感觉心头一凉,让我想起了画笔机制与qss不兼容的问题。难怪它不生效。之前我也记录过,qt画笔绘图走的是另外一套机制,它直接从根本上赋予部件颜色和样式,这不是后期qss能左右的。虽然手册中提到过,可能在以后的版本中兼容这个问题。但总归还是不要主动去挑战它,毕竟做软件要考虑尽可能的兼容。
接着我找到了另外一个函数setBackground(const QBrush &)。说实话,因为上述的不兼容问题,我在用qss时,挺腻歪这些跟画笔绘图有关的字样的。于是我在主窗体加载样式之前,加了一句代码:
ui->mdiArea->setBackground(QBrush());
我的想法是,遇到这类问题,在不是非要使用画笔绘图的情况下,就让它初始化为不介入的状态,后期让qss来控制全局。
/*QMdiArea*/
QMdiArea {
background-color: rgba(0, 0, 0, 0);
}
/*这里的意思,我是让它变透明,颜色与主窗体浑然一体。当然你可以做成其它样式。*/
结果就解决问题了。