如何使用指定的 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,因为这是首选方式。使用QWidgetsetStylesheet方法

setStyleSheet("background-image: url(:/images/pixmap.png);");

pixmap.png 将位于资源文件中 images 前缀下的位置。更多详情请查看Qt stylesheet examples。

【讨论】:

因为我需要深度自定义小部件。

以上是关于如何使用指定的 png 文件制作 QWidget 背景?的主要内容,如果未能解决你的问题,请参考以下文章

如何制作*** QWidget 模态?

如何在 QWidget 中获取 QtDataVizualisation 的 QPixmap 并保存到文件?

如何从PNG图像制作字体图标?

QT-如何在 QThread 中使用 QWidget?

Python - 在 Windows 上,如何将所有文件制作为 zip?

如何制作网站ico小图标