I am making a desktop carousel app. There I need to show image widgets, which might contain other sub-widgets as well. For that I am using a QFrame
with the required image as background. Here is the image I am trying to use: image link. What I want is that only the image shows up, no background image or anything shows up as well, so to the user it looks like just the image. Here is my code:
setGeometry(QRect(100, 20, 325,400));
setFrameStyle(QFrame::StyledPanel);
setStyleSheet("QFrame#ImageFrame { background-color: transparent; background: url(:icon/ipad-skin); }");
setAutoFillBackground(false);
However, I am getting this as a result:
I tried this as well (obtained from here) (and removing the stylesheet):
void MyWidget::paintEvent(QPaintEvent *p)
{
QPainter* pPainter = new QPainter(this);
pPainter->drawPixmap(rect(), QPixmap(":icon/newskin.png"));
delete pPainter;
QWidget::paintEvent(p);
}
Nothing different, the exact same result. The greyness of the background still shows.
How do I make the grey background of the QFrame
go and display only the image (the dimensions I am setting are the same as the image)?
P.S I am aware that similar questions hve been answered here: QWidget transparent background (but not the children), and here: Frameless and transparent window qt5 but these doesn't solve my problem. The last solution makes my QFrame look like this:
The QFrame now comes with a title bar which is anything but what I wanted in the first place.
Edit - This solution works, but in my use-case, I need to display an image that is rendered via GL inside the QFrame (specifically, in the viewport within the iPad image we can see here). In Windows, setting the Qt::WA_TranslucentBackground
property makes that GL-rendered image invisible. It works fine in Mac, though. So I am looking for a solution which will work in Windows as well.
This code works for me (tested under MacOS/X 10.10.3, using Qt 5.5.0-beta; I'd expect it to work under any Qt version 4.5.0 or higher though):
main.h:
main.cpp:
Screenshot (showing the app's window in front of my desktop background):