首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何用指定的png文件制作QWidget背景?

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

Stack Overflow用户
提问于 2013-07-23 15:36:10
回答 3查看 2K关注 0票数 0
代码语言:javascript
运行
复制
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?

我使用的是Windows平台和Qt4.8

请勿使用样式表。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-07-23 17:38:55

如果你真的不想使用样式表,你的问题可以通过重写MyDialog类的paint事件来解决,就像这个堆栈溢出问题的答案:Background image not showing on QWidget

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

票数 0
EN

Stack Overflow用户

发布于 2013-07-23 16:27:34

使用

代码语言:javascript
运行
复制
setAttribute(Qt::WA_TranslucentBackground);

看一看this:

具体地说:

代码语言:javascript
运行
复制
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服务器的使用。FramelessWindowHint窗口:小部件需要设置Qt::Windows窗口标志才能使半透明效果工作。

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

票数 1
EN

Stack Overflow用户

发布于 2013-07-23 16:33:11

我不明白为什么你不想使用stylesheets,因为这是首选的方式。使用QWidgetsetStylesheet方法

代码语言:javascript
运行
复制
setStyleSheet("background-image: url(:/images/pixmap.png);");

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17804101

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档