我需要设置QFrame
一个背景图片:http: //imgur.com/RnSghvV。这是我尝试过的:
setAutoFillBackground(true);
setWindowFlags(Qt::FramelessWindowHint);
setStyleSheet("background: transparent;");
QPalette p = this->palette();
p.setBrush(QPalette::Base, QPixmap("ipad.png"));
this->setPalette(p);
这就是我得到的:
如您所见,边缘有一个恼人的黑框,我想将其移除,并仅查看图像。我怎么做?
PS,可以通过使用属性使其工作Qt:: WA_TranslucentBackground
,如此处所示。但是,在我的情况下,QFrame 将包含其他子小部件,其中一些是通过 OpenGL 渲染的 QImage,并且设置Qt:: WA_TranslucentBackground
会使这些图像在 Windows 上不可见。所以我正在寻找一个不使用这个属性的解决方案。
编辑:
基于 Evgeny 提出的解决方案,我尝试了这个(我使用 325 x 400 作为小部件的尺寸,因为这些是图像的尺寸):
#include <QApplication>
#include <QLabel>
#include <QBitmap>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QLabel l;
l.setWindowFlags(Qt::FramelessWindowHint);
QPixmap p(":/img/ipad.png");
l.setPixmap(p);
l.setScaledContents(true);
l.resize(300, 500); //just to test my idea
l.setMask(p.scaled(l.width(),l.height(),Qt::IgnoreAspectRatio,
Qt::SmoothTransformation).mask());
l.show();
return a.exec();
}
有了这个,它看起来像这样:
右侧和底部仍然显示灰色背景。如果我添加setStyleSheet("background: transparent")
,灰色背景变为黑色。