QT 关于两张图片层叠显示的问题

purplepare 2016-08-23 02:47:52
各位大神,我现在遇到一个问题,就是在现在有两张图片,有一个label,不知道怎么实现两张图片A,B,现在想图片A作为底层,图片B作为顶层,二者层叠显示,就是B要是透明显示,这样的需求,我该使用QT的什么类。
eg:


图片中,十字架是图片A,曲线坐标是图片B,这样的显示效果,是如何实现的呢?
谢谢各位大神~
...全文
2195 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
墨上烟雨 2020-06-27
  • 打赏
  • 举报
回复
https://blog.csdn.net/weixin_42704090/article/details/104782501
上述博客是在QLabel先显示图片,然后在图片上画矩形并显示,是通过重写QLabel实现的。你把MyLabel类中的绘图事件修改一下,把drawRect换成drawPixmap,不过你的前景图需要半透明或者透明的,不然会看不到背景图。我没有实践,但我想应该可以行得通的,你可以试试看。
冷静忍耐 2016-08-29
  • 打赏
  • 举报
回复
引用 6 楼 purplepare 的回复:
[quote=引用 5 楼 u013466477 的回复:] [quote=引用 4 楼 purplepare 的回复:] [quote=引用 1 楼 u013466477 的回复:] 继承PaintEvent事件,直接画出来就行了 先画A,再画B
不行的,这样B会覆盖A[/quote] 如果B是透明的,那B图片不就等于没有??反正透明看不到 还是半透明?[/quote] 图片上的效果,是半透明嘛?最后得效果,只要是像照片上的,就可以,所以如果B 是半透明,就能做到,是吗?[/quote] 肯定可以做到,但效果肯定不好,怎么可能两个有不透明背景的图片叠在一起还都能看清晰??? 我觉得你应该想的是怎么去掉某一张的背景,如果只有那几根线不就好了??图片为啥要背景
purplepare 2016-08-29
  • 打赏
  • 举报
回复
引用 5 楼 u013466477 的回复:
[quote=引用 4 楼 purplepare 的回复:] [quote=引用 1 楼 u013466477 的回复:] 继承PaintEvent事件,直接画出来就行了 先画A,再画B
不行的,这样B会覆盖A[/quote] 如果B是透明的,那B图片不就等于没有??反正透明看不到 还是半透明?[/quote] 图片上的效果,是半透明嘛?最后得效果,只要是像照片上的,就可以,所以如果B 是半透明,就能做到,是吗?
冷静忍耐 2016-08-29
  • 打赏
  • 举报
回复
引用 4 楼 purplepare 的回复:
[quote=引用 1 楼 u013466477 的回复:] 继承PaintEvent事件,直接画出来就行了 先画A,再画B
不行的,这样B会覆盖A[/quote] 如果B是透明的,那B图片不就等于没有??反正透明看不到 还是半透明?
purplepare 2016-08-29
  • 打赏
  • 举报
回复
引用 1 楼 u013466477 的回复:
继承PaintEvent事件,直接画出来就行了 先画A,再画B
不行的,这样B会覆盖A
  • 打赏
  • 举报
回复
引用 9 楼 purplepare 的回复:
[quote=引用 3 楼 what951006 的回复:] 可以用1L方法 也可以用widget raise()方法
widget raise()方法?方法是什么方法,是针对label的吗?[/quote] 继承于QWidget的 label也有
冷静忍耐 2016-08-29
  • 打赏
  • 举报
回复
半透明:得到的tmpPix就是半透明图片。用PS把背景去掉就好了吧,为什么一定要用代码 QPixmap pix(图片B); QPixmap tmpPix(pix.size()); tmpPix.fill(Qt::transparent); QPainter p1(&tmpPix); p1.setCompositionMode(QPainter::CompositionMode_Source); p1.drawPixmap(0, 0, pix); p1.setCompositionMode(QPainter::CompositionMode_DestinationIn); p1.fillRect(tmpPix.rect(), QColor(0, 0, 0, 150)); p1.end(); //界面是两个label要重合,label放下面,label2放上面 label->setPixmap(A); label2->setPixmap(tmpPix);
shcdwz1234 2016-08-29
  • 打赏
  • 举报
回复
底层用widget做背景,顶层label作为widget的子控件不就行了吗?
purplepare 2016-08-29
  • 打赏
  • 举报
回复
引用 3 楼 what951006 的回复:
可以用1L方法 也可以用widget raise()方法
widget raise()方法?方法是什么方法,是针对label的吗?
purplepare 2016-08-29
  • 打赏
  • 举报
回复
引用 2 楼 dell_tx 的回复:
建议使用两个label控件,设置位置相同,label1设置stylesheet “+”图片设置为背景 设置label2的背景为透明 再使用setPixmap显示图片
你好,你能具体说明吗?我尝试过 ui.label_1->setPixmap(QPixmap("hello_A.jpg")); ui.label_2->setPixmap(QPixmap("hello_B.jpg")); ui.label_2->setAttribute(Qt::WA_TranslucentBackground,true); 结果还是覆盖。有好的办法吗?谢谢
  • 打赏
  • 举报
回复
可以用1L方法 也可以用widget raise()方法
  • 打赏
  • 举报
回复
建议使用两个label控件,设置位置相同,label1设置stylesheet “+”图片设置为背景 设置label2的背景为透明 再使用setPixmap显示图片
冷静忍耐 2016-08-23
  • 打赏
  • 举报
回复
继承PaintEvent事件,直接画出来就行了 先画A,再画B

16,794

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧