如何使用指定的 png 文件制作 QWidget 背景?
Posted
技术标签:
【中文标题】如何使用指定的 png 文件制作 QWidget 背景?【英文标题】:How to make QWidget background with specified png file? 【发布时间】:2013-07-23 07:36:09 【问题描述】:MyDialog::MyDialog(QWidget* parent, Qt::WindowFlags f)
: QWidget(parent, Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint)
, _pixmap(new QPixmap(myPngFile))
QPalette palette;
palette.setBrush(this->backgroundRole(), QBrush(*_pixmap));
this->setPalette(palette);
setFixedSize(_pixmap->size());
myPngFile 定义 png 路径。问题是当我显示 MyDialog 时 png 文件中的透明部分显示为黑色,如何更正它以加载 myPngFile?
我正在使用带有 Qt4.8 的 Windows 平台
请不要使用样式表。
【问题讨论】:
【参考方案1】:使用
setAttribute(Qt::WA_TranslucentBackground);
看看this:
具体来说:
QPixmap aPixmap(":/splash.png");
QLabel* aWidget = new QLabel(0, Qt::FramelessWindowHint|Qt::WindowStaysOnTopHint);
aWidget->setAttribute(Qt::WA_TranslucentBackground);
aWidget->setPixmap(aPixmap);
aWidget->show();
还有docs:
创建半透明窗口 从 Qt 4.5 开始,可以 在支持的窗口系统上创建具有半透明区域的窗口 合成。要在***小部件中启用此功能,请将其设置为 Qt::WA_TranslucentBackground 属性与 setAttribute() 并确保 它的背景在区域中涂有非透明颜色 你想要部分透明。
平台说明: X11:这个 功能依赖于使用支持 ARGB 视觉效果的 X 服务器 和一个合成窗口管理器。 Windows:小部件需要具有 为半透明设置的 Qt::FramelessWindowHint 窗口标志为 工作。
(你已经做了这个大胆的部分,但为了将来的人最好让它可见)
【讨论】:
我用过,它会让整个小部件透明。还是谢谢【参考方案2】:如果你真的不想使用样式表,你的问题可以通过覆盖 MyDialog
类的绘制事件来解决,就像这个 *** 问题的答案一样:
Background image not showing on QWidget
但我也建议使用样式表来解决您的问题。
【讨论】:
谢谢,我重绘它并解决问题。只是因为这是很常见的请求,Qt需要重新绘制才能解决。【参考方案3】:我不明白您为什么不想使用stylesheets,因为这是首选方式。使用QWidget
的setStylesheet
方法
setStyleSheet("background-image: url(:/images/pixmap.png);");
pixmap.png
将位于资源文件中 images
前缀下的位置。更多详情请查看Qt stylesheet examples。
【讨论】:
因为我需要深度自定义小部件。以上是关于如何使用指定的 png 文件制作 QWidget 背景?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 QWidget 中获取 QtDataVizualisation 的 QPixmap 并保存到文件?