【Qt样式(qss)-4】应用到QMdiArea不生效的解决

背景:

之前写记录过几篇qss相关内容:

【Qt样式(qss)-1】手册小结(附例:软件深色模式)

【Qt样式(qss)-2】使用小结(软件换肤,比如暗黑模式)

【Qt样式(qss)-3】几套配色方案

【Qt样式(qss)-5】qss混乱,错乱,不生效的一种原因-CSDN博客

今天偶然想改一下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);
}
/*这里的意思,我是让它变透明,颜色与主窗体浑然一体。当然你可以做成其它样式。*/

结果就解决问题了。

你可能感兴趣的:(qt/c++,qt,c++,css)