QT=> 父界面设置背景图,子界面不受影响解决方案

3 篇文章 1 订阅

  设置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= new QWidget(parent_widget);
	sub_widget->resize(100,100);

此时子界面sub_widget 做任何操作,都不会受到parent_widget背景图的影响

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Terry.Z_1009

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值