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

时间:2013-07-23 07:36:10

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

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

请不要使用样式表。

3 个答案:

答案 0 :(得分: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以来,它已成为可能   在支持的窗口系统上创建具有半透明区域的窗口   合成。要在顶级窗口小部件中启用此功能,请设置它   使用setAttribute()并确保Qt :: WA_TranslucentBackground属性   它的背景在区域中涂有非不透明的颜色   你想要部分透明。

     

平台说明:   X11:这个   功能依赖于使用支持ARGB视觉效果的X服务器   和合成窗口管理器。    Windows:小部件需要拥有   为半透明设置的Qt :: FramelessWindowHint窗口标志   工作

(你已经做过这个大胆的部分,但是对于未来的角色来说,最好让它变得可见)

答案 1 :(得分:0)

我无法理解为什么你不想使用stylesheets,因为这是首选方式。使用QWidget

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

pixmap.png位于images前缀下的资源文件中。有关详细信息,请查看Qt stylesheet examples

答案 2 :(得分:0)

如果你真的不想使用样式表,你的问题可以通过覆盖你的MyDialog类的paint事件来解决,就像在这个stackoverflow问题的答案中一样: Background image not showing on QWidget

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