You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何仅通过代码为窗口背景设置带透明通道的PNG图片(不使用CSS)

解决Qt窗口设置带透明通道PNG背景的问题

要让窗口背景的PNG透明区域正常显示(不变成黑色),需要调整以下几点:

  • 必须启用Qt::WA_TranslucentBackground属性,这是让窗口支持透明背景的核心开关。
  • 确保调色板的QPalette::Window颜色设置为透明,避免默认的黑色填充。
  • 按需缩放图片以匹配窗口大小,保证背景显示完整。

修改后的完整代码:

ui.setupUi(this);

// 加载带透明通道的PNG图片
QPixmap bkgnd(":/pic");
// 缩放图片匹配窗口大小,保持比例或忽略比例按需选择
bkgnd = bkgnd.scaled(this->size(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation);

QPalette palette;
// 将Window颜色设为透明,避免透明区域显示黑色
palette.setColor(QPalette::Window, Qt::transparent);
// 设置窗口背景画刷为加载的透明图片
palette.setBrush(QPalette::Window, bkgnd);

this->setPalette(palette);
// 启用半透明背景属性,这一步必须有
this->setAttribute(Qt::WA_TranslucentBackground, true);
// 如果窗口有标题栏,可能需要关闭默认的背景绘制(可选,依窗口类型调整)
// this->setWindowFlags(Qt::FramelessWindowHint);

关键说明:

  • Qt::WA_TranslucentBackground:必须开启,否则窗口无法识别透明通道,透明区域会被默认的黑色填充。
  • palette.setColor(QPalette::Window, Qt::transparent):确保窗口的基础背景色是透明,避免图片未覆盖的区域显示黑色。
  • 图片缩放:使用Qt::SmoothTransformation可以让缩放后的图片更清晰,按需选择是否保持比例。

内容的提问来源于stack exchange,提问作者Cesar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 15:26:09