设置QT控件背景图的方法有几种,这里不做介绍。本文作者采用QSS方式设置背景图
问题:父界面通过setStyleSheet设置背景图时,在父界面基础上创建子界面,此时子界面中的背景会被父界面影响。
//主界面设置背景图this->setStyleSheet("QFrame{background-image:url(:lcdicon/icon/background_1.png)}");
此处弹窗应为红色,但是却受到父界面背景图影响,导致颜色变成父界面背景图颜色。即使此时的子界面是通过paintEvent(QPaintEvent *event)函数重绘,也是会受到父界面背景图影响。
解决方法:
在父界面设置背景图时,需要设置如下:
MainScreen::MainScreen(QWidget *parent):QFrame(parent){//do something...}//=========================================================//声明父对象
MainScreen *mainScreen;//========================================================= //设置父对象背景图
this->setObjectName("mainScreen");//此句非常必要,不可省略
this->setStyleSheet("QFrame#mainScreen{background-image:url(:lcdicon/icon/background_1.png)}");//#mainScreen
此时效果如下:
变为正常子界面重绘的红色背景,不受父界面影响
举例
1、创建父界面
QWidget parent_widget=new QWidget;
parent_widget->setObjectName("parent_widget");
parent_widget->setStyleSheet("#parent_widget{background-image:url(:/test.png)}");//或者如下 都可以。只是加不加控件类的区别(QWidget)
parent_widget->setStyleSheet("QWidget#parent_widget{background-image:url(:/test.png)}");
widget->setObjectName(“parent_widget”);这一句非常重要,不加的话,子界面会受到父界面影响。setObjectName(“parent_widget”)中widget是父界面的名称。
widget->setStyleSheet(“#parent_widgett{background-image:url(:/test.png)}”);
#parent_widget(为控件名称)
2、创建子界面
QWidget sub_widget=newQWidget(parent_widget);
sub_widget->resize(100,100);
此时子界面sub_widget 做任何操作,都不会受到parent_widget背景图的影响
版权归原作者 ZML_1009 所有, 如有侵权,请联系我们删除。