0
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 平台

请不要使用样式表。

4

3 回答 3

1

利用

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 开始,可以在支持合成的窗口系统上创建具有半透明区域的窗口。要在顶级小部件中启用此功能,请使用 setAttribute() 设置其 Qt::WA_TranslucentBackground 属性,并确保在您希望部分透明的区域中使用非透明颜色绘制其背景。

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

(这个大胆的部分你已经做了,但对于未来的人来说最好让它可见)

于 2013-07-23T08:27:33.543 回答
0

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

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

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

于 2013-07-23T08:33:10.567 回答
0

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

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

于 2013-07-23T09:38:54.777 回答