QWidget样式表或背景图片在Qt Designer 中能显示但运行时不显示的解决方法

目录

1. 现象

2. 解决方法

2.1. 第1种解决方法

2.2. 第2种解决方法

3. 总结

4. 附录


1. 现象

        今天想在QWidget中贴一张png图片作为背景图或者通过QSS设置背景颜色,在Qt Designer 能显示,但运行时,死活不显示背景图片或背景颜色。样式表设置如下:

QWidget
{
  border-image:url(:/untitled2/image/operpanel.png);
}

QWidget
{
    background-color:#FF0000;
}

 2. 解决方法

     Qt Designer 中能显示证明图片的路径是正确的,不显示肯定其它问题导致的。

2.1. 第1种解决方法

        经过排查,在QWidget所在类重写paintEvent函数,如下:

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

     其中Widget为QWidget的子类,重新编译运行后就可以显示图片了。

2.2. 第2种解决方法

       如果不是需要直接在Widget(Widget为QWidget的子类)窗体上贴图,可以在Widget的上面套一个QFrame,然后将图片贴到QFrame对象上,如下:

此时不需要重写QWidget的paintEvent函数。 

3. 总结

  •  如果想直接在QWidget上贴图且能在运行时显示,必须为QWidget窗体设置好样式表,且按2.1节那样重写paintEvent函数。
  • 如果需求不是直接在QWidget上贴图,则可以在QWidget上套个QFrame,让这个QFrame完全铺满盖住QWidget,然后对QFrame设置好背景图的样式表,此时不需要重写QWidget的paintEvent函数。

4. 附录

  • 图片不显示只对整个窗体的背景图时不显示,当图片贴在窗体上的某个部件如:作为按钮贴图,则不会存在这个问题。
  • 以下博文说的通过勾选Qtcreator中的Shadow build方法都不起作用,写这博文的人根本就没搞懂Qtcreator中的Shadow build的作用。

         Qt-ui界面的工具栏在设计时能出现,但是运行之后不显示的问题解决

         解决Qt应用程序图标图片不显示,你可以试一试! 

关于Shadow build具体作用,请参考:Qt Creator 的 Shadow build(影子构建)

  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值