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重绘事件。
本质上提升就是升级为响应对象的子类,但是具体为何不能实现我却不太懂了。
目前可以得到的信息就是提升后,父窗体的样式会影响子窗体的样式。