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
请勿使用样式表。
发布于 2013-07-23 17:38:55
如果你真的不想使用样式表,你的问题可以通过重写MyDialog类的paint事件来解决,就像这个堆栈溢出问题的答案:Background image not showing on QWidget
但我也建议您使用样式表来解决您的问题。
发布于 2013-07-23 16:27:34
使用
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服务器的使用。FramelessWindowHint窗口:小部件需要设置Qt::Windows窗口标志才能使半透明效果工作。
(你已经做了这个大胆的部分,但对于未来的人来说,最好让它变得可见)
发布于 2013-07-23 16:33:11
我不明白为什么你不想使用stylesheets,因为这是首选的方式。使用QWidget的setStylesheet方法
setStyleSheet("background-image: url(:/images/pixmap.png);");资源文件中images前缀下的pixmap.png所在的位置。有关更多详细信息,请查看Qt stylesheet examples。
https://stackoverflow.com/questions/17804101
复制相似问题