我正在制作一个桌面轮播应用程序。在那里我需要显示图像小部件,它也可能包含其他子小部件。为此,我使用QFrame
所需图像作为背景。这是我尝试使用的图像:image link。我想要的是只显示图像,没有背景图像或任何东西显示,所以对用户来说它看起来只是图像。这是我的代码:
setGeometry(QRect(100, 20, 325,400));
setFrameStyle(QFrame::StyledPanel);
setStyleSheet("QFrame#ImageFrame { background-color: transparent; background: url(:icon/ipad-skin); }");
setAutoFillBackground(false);
但是,我得到了这个结果:
我也试过这个(从这里获得)(并删除样式表):
void MyWidget::paintEvent(QPaintEvent *p)
{
QPainter* pPainter = new QPainter(this);
pPainter->drawPixmap(rect(), QPixmap(":icon/newskin.png"));
delete pPainter;
QWidget::paintEvent(p);
}
没有什么不同,完全一样的结果。背景的灰色仍然显示出来。
如何使QFrame
go的灰色背景只显示图像(我设置的尺寸与图像相同)?
PS我知道在这里已经回答了类似的问题:QWidget transparent background (but not the children)和这里:Frameless and transparent window qt5但这些并不能解决我的问题。最后一个解决方案使我的 QFrame 看起来像这样:
QFrame 现在带有一个标题栏,这与我最初想要的完全不同。
编辑- 此解决方案有效,但在我的用例中,我需要在 QFrame 内显示通过 GL 渲染的图像(具体来说,在我们可以在此处看到的 iPad 图像的视口中)。在 Windows 中,设置该Qt::WA_TranslucentBackground
属性会使 GL 渲染的图像不可见。不过,它在 Mac 中运行良好。因此,我正在寻找一种也适用于 Windows 的解决方案。