[Development] QPixmap::fill( const QWidget *, ... )
Uwe Rathmann
Uwe.Rathmann at tigertal.de
Tue Apr 10 20:03:48 CEST 2012
On 04/10/2012 06:47 PM, Samuel Rødal wrote:
> What's your use case?
QwtPlot is a composite widget, where one of its children is a canvas (
QWidget ) to display the data.
For this special widget the Qt::WA_OpaquePaintEvent attribute is enabled
and therefore I have to render the background inside of the paint event.
There are 2 reasons for rendering the background myself:
1) Overlay widgets
In combination with overlay widgets ( f.e rubberbands ) Qt doesn't
restore the content of a widget from its backing store.
For large scenes this leads to heavy repaints - too slow for operations
like zooming.
Because of this problem the canvas implements its own backing store,
that is initialized using QPixmap::fill.
2) Style Sheets
When using style sheets the borders are part of the background and
rendered before the paint event is processed.
But for rounded borders you need to render the widget in the following
order:
1) background
2) content
3) border
Otherwise antialiasing of the border is done wrong.
> Maybe QWidget::render() with DrawWindowBackground
> and no DrawChildren can be used instead?
Guess this will work - I will try it.
> The QPixmap::fill(const QWidget *...) function was not possible to
> implement as in 4.8 since QPixmap is now part of QtGui whereas QWidget
> is part of QtWidgets.
I thought that modularization might be the reason.
But if there are no plans to add an implementation somewhere else in the
future I would suggest to remove the method completely.
IMO it would be better to have a clean compiler error instead of a dummy
implementation, that does nothing beside turning it into a runtime error.
Uwe
PS: my first reply was by accident not to the list - sorry Samuel
More information about the Development
mailing list