QWidget提升后,无法对提升的对象设置背景颜色,QFrame却可以。

本文探讨了在Qt编程中,提升的QWidget对象无法直接使用setStyleSheet()设置样式的问题。QFrame的提升类可以正常设置样式,而QWidget不行。解决方案包括在提升的QWidget中添加一个子(QWidget)框体、设置WA_StyledBackground属性或重写paintEvent进行自定义绘制。博客详细分析了问题原因及不同解决方法的适用场景。
摘要由CSDN通过智能技术生成

QWidget提升后,不能直接用setStyleSheet()对QWidget这个提升对象的背景颜色和样式做调整了。
但是,如果是QFrame 的提升类,却可以用setStyleSheet()对QFrame的提升对象做样式调整。
具体现象见下方实列:
情况一:
QWidget提升后不能setStyleSheet()对对象本身做调整了。QWidget窗体本身背景色没有改变,但是内部控件颜色改变了,这是控件继承的原因,具体原因这里不解释。【我理解的是因为widget_title是提升的QWidget对象,系统找不到QWidget】

ui->widget_title->setStyleSheet("QWidget{background-color:#000000;border:3px solid blue}");

在这里插入图片描述

情况二
QFrame 的提升类,却可以用setStyleSheet()对QFrame的提升对象做样式调整。frame_login是QFrame的提升类,却可以直接用QFrame对控件进行操作。
在这里插入图片描述

解决办法一
在QWidget的提升类中,加一个QWidget框体,把内部空间包含,控件layout设置为0,这样显示上可以避免问题。
在这里插入图片描述
解决办法二
使用提升的类的对象,脱离父窗体样式,设置新的样式。注意,这样的方法也会影响内部控件的样式。

ui->widget_title->setAttribute(Qt::WA_StyledBackground);
ui->widget_title->setStyleSheet("QWidget{background: black}");

解决办法三
在派生的类种重写重绘事件,并添加下面几段代码,去设置背景。

void NetMusicPlayerTitle::paintEvent(QPaintEvent *)
 {
     QStyleOption opt;
     opt.init(this);
     QPainter p(this);
     style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
 }

https://blog.csdn.net/QQ_2558030393/article/details/103295426
这个博主给我提供了最后一种解决办法,重写paintEvent重绘事件。

本质上提升就是升级为响应对象的子类,但是具体为何不能实现我却不太懂了。
目前可以得到的信息就是提升后,父窗体的样式会影响子窗体的样式。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值