如何使用指定的png文件制作QWidget背景


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文件中的透明部分显示为黑色,如何更正它以加载myPng文件?

我正在使用带有Qt4.8的Windows平台

请不要使用样式表。

使用

setAttribute(Qt::WA_TranslucentBackground);

看看这个:

具体说来:

QPixmap aPixmap(":/splash.png");
QLabel* aWidget = new QLabel(0, Qt::FramelessWindowHint|Qt::WindowStaysOnTopHint);
aWidget->setAttribute(Qt::WA_TranslucentBackground);
aWidget->setPixmap(aPixmap);
aWidget->show();

和文档:

创建半透明窗口 从Qt 4.5开始,可以在支持以下内容的窗口系统上创建具有半透明区域的窗口合成。要在顶级微件中启用此功能,请将其Qt::WA_TranslucentBackground属性与 setAttribute(( 并确保其背景在区域中涂有不透明的颜色您希望部分透明。

平台说明:X11:这个功能依赖于使用 AR 视觉对象的 X 服务器和一个合成窗口管理器。窗口:小部件需要有将 Qt::FramelessWindowHint 窗口标志设置为半透明工作。

(这个粗体部分你已经做了,但对于未来的来者来说,最好让它可见(

如果你真的不想使用样式表,你的问题可以通过覆盖MyDialog类的 paint 事件来解决,就像这个 stackoverflow 问题的答案一样:背景图片未显示在QWidget上

但我也建议使用样式表来解决您的问题。

我不明白你为什么不想使用样式表,因为这是首选方式。使用setStylesheet方法QWidget

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

pixmap.png的位置将位于资源文件中images前缀下的位置。有关更多详细信息,请查看Qt样式表示例。

最新更新