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平台
请不要使用样式表。
答案 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
但我也建议您使用样式表来解决问题。