Thanks.

The problem with setMask is the edges aren't anti-aliased and I couldn't work out how to do this otherwise it would seem like the best solution.

I'm currently using a QPainterPath for the masking graphics effect, which masks the inner button and anti-aliases the edges.

Can you use a QPainterPath with setmask?