Let's try to go for a quick solution. Subclass QPushButton, add a qreal "opacity" property to the button subclass (so that you can animate its value) and reimplement the paint event. In the event implementation there are two things that might work. First you might try setting up a painter and calling QPainter::setOpacity() before calling the base class implementation or if this doesn't work, call the base class implementation first and then use QPainter::setCompositionMode() to setup a composition mode that will allow you to paint the alpha channel to what is already painted using an opacity of your choice. Which composition mode to choose is left as an exercise to the reader.