[Interest] Issue painting over child widgets

Murphy, Sean M. sean.murphy at gd-ais.com
Thu Nov 17 21:40:42 CET 2011


Ok, so how do I go about step #1 correctly?  My current application has one top-level layout, with all my widgets inside the layout.  Ideally, I'd like to have my application be resizable: allowing the QLayout to take care of my visible widgets.  So how do I get the invisible widget you're proposing to overlay the "real" widgets, as the application resizes?

I'm a little blind to how I go about putting a widget above another widget.  Assuming I can get step #1 figured out, steps 2-4 look pretty simple...

Sean

>1 - Place a widget over the label widgets in question.
>
>2 - setAttribute(Qt::WA_TransparentForMouseEvents,true);
>     so that it becomes transparent to mouse events.
>
>3 - Use a transparent background so you can see the widgets beneath.
>
>4 - Draw (animation) on it whatever you want to appear floating
>     above the widgets beneath and violating the otherwise rigid
>     rectangular widget boundaries.
>
>Bill
>
>
>>
>> I've got a QMainWindow with 5 QLabels on it and a QPushButton.  Call
>the
>> QLabels "camera" and "image1" - "image4".  So the idea is that the
>> "camera" label is always showing a live feed from the digital camera.
>> When the user presses the pushbutton, a timer starts that snaps four
>> images over a period of time and puts those images in labels "image1"
>-
>> "image4", respectively.  This all works fine, but I wanted to make it
>> look a little more polished by adding an animation.
>>
>> So what I'd like to happen is when the timer fires off to grab an
>image,
>> I want that image to appear to move from the "camera" label to the
>> correct "image" label. So it should appear to jump off from the
>"camera"
>> label, float over the top of everything, and land on the desired
>"image"
>> label.
>>
>> So my first attempt was to override the paintEvent() of my
>QMainWindow,
>> create a QPainter and use drawPixmap() to draw my floating image.
>It's
>> drawing my image, but the image is showing up under all the child
>> widgets, instead of over the top of everything.
>>
>> Here's my paintEvent() code:
>>
>> void MainWindow::paintEvent(QPaintEvent *e)
>> {
>>     QMainWindow::paintEvent(e);
>>     if (showMovingPixmap == true)
>>     {
>>         QPainter painter(this);
>>         painter.setClipping(false);
>>
>painter.drawPixmap(movingPixmapXPos,movingPixmapYPos,movingPixmap);
>>         movingPixmapXPos++;
>>         movingPixmapYPos++;
>>     }
>> }
>>
>> So what am I missing?  Would it be easier to change my application to
>> have a QGraphicsView as the child widget of the QMainWindow, and do
>> everything on a QGraphicsScene?
>>
>> Sean
>> _______________________________________________
>> Interest mailing list
>> Interest at qt-project.org <mailto:Interest at qt-project.org>
>> http://lists.qt-project.org/mailman/listinfo/interest
>>
>
>
>_______________________________________________
>Interest mailing list
>Interest at qt-project.org
>http://lists.qt-project.org/mailman/listinfo/interest



More information about the Interest mailing list