<div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr">Hello,<div><br></div><div>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.</div><div><br></div><div><br>I was trying to access (and, possibly, update) the gradient of a QBrush.</div><div>The problem is that QBrush.gradient() just returns a basic QGradient, and not the actual gradient class used in its construction.</div><div>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:</div><div><br></div><div><font face="monospace">>>> grad = QtGui.QConicalGradient(.5, .5, 225)<br></font></div><div><font face="monospace">>>> brush = QtGui.QBrush(grad)</font></div><div><font face="monospace">>>> brush.gradient().angle()</font></div><div><font face="monospace">AttributeError: 'QGradient' object has no attribute 'angle'</font></div><div><font face="monospace">>>> brush.gradient()</font></div><div><font face="monospace"><PyQt5.QtGui.QGradient at 0x7f941a28c2d0></font></div><div></div><div><font face="monospace">>>> brush.gradient().type() == QtGui.QGradient.ConicalGradient</font></div><div><font face="monospace">True<br clear="all"></font><div><br></div><div>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.</div><div><br></div><div>I don't know if there's a specific reason for this (maybe something related to performance).</div><div><br>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:</div><div><br></div><div><span style="color:rgb(0,0,0);font-family:monospace">>>> import sip</span><br></div><div><span style="font-family:monospace"><span style="color:rgb(0,0,0)">>>> brushGrad = sip.cast(brush.gradient(), QtGui.QConicalGradient)</span><br></span></div><div><span style="font-family:monospace"><span style="color:rgb(0,0,0)">>>> brushGrad.angle()</span></span></div><div><span style="font-family:monospace"><font color="#000000">225.0<br></font></span><br>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).<br><br></div><div>I hope this helps.</div><div><br></div><div>Maurizio</div><div><br></div>-- <br><div dir="ltr" class="gmail_signature">È difficile avere una convinzione precisa quando si parla delle ragioni del cuore. - "Sostiene Pereira", Antonio Tabucchi<br><a href="http://www.jidesk.net" target="_blank">http://www.jidesk.net</a></div></div></div></div></div></div></div></div></div></div>