Re: Access to QBrush gradient
Phil Thompson <[email protected]> Sun, 26 Apr 2020 09:34:59 +0100
| Newsgroups | gmane.comp.python.pyqt-pykde |
|---|---|
| Message-ID | <[email protected]> |
On 26/04/2020 07:42, Maurizio Berti wrote: > Hello, > > this was meant to be a question, but after some thinking and testing, I > found a solution for my doubt on my own, and since I believe it might > be > helpful to know this, I thought it would be good to share it with you. > > > I was trying to access (and, possibly, update) the gradient of a > QBrush. > The problem is that QBrush.gradient() just returns a basic QGradient, > and > not the actual gradient class used in its construction. > The result is that you won't be able to access the gradient functions > (for > example, the angle of a conical gradient) since it obviously results in > an > AttributeError: > >>>> grad = QtGui.QConicalGradient(.5, .5, 225) >>>> brush = QtGui.QBrush(grad) >>>> brush.gradient().angle() > AttributeError: 'QGradient' object has no attribute 'angle' >>>> brush.gradient() > <PyQt5.QtGui.QGradient at 0x7f941a28c2d0> >>>> brush.gradient().type() == QtGui.QGradient.ConicalGradient > True > > By looking at the Qt C++ sources, gradient() just returns a standard > QGradient indeed, "filled in" with the QBrush data, so it's not a PyQt > issue: Qt just does that. > > I don't know if there's a specific reason for this (maybe something > related > to performance). > > After closely looking at the sources of QBrush again, though, I > realized > that the gradient is "cast" when needed, so I gave it a try by using > sip.cast; it works: > >>>> import sip >>>> brushGrad = sip.cast(brush.gradient(), QtGui.QConicalGradient) >>>> brushGrad.angle() > 225.0 > > Obviously you have to check the gradient().type() before, and cast the > correct gradient afterwards, otherwise the values won't make much > sense: in > the case above a cast on a QLinearGradient will result in the finalStop > having coordinates (255, 0). > > I hope this helps. > > Maurizio I can fix that so the conversion is done automatically. Thanks, Phil _______________________________________________ PyQt mailing list [email protected] https://www.riverbankcomputing.com/mailman/listinfo/pyqt