Для того, чтобьІ переопределить стиль кнопки необязательно от неё наследоваться. Гораздо проще перехватить собьІтие. Так вьІ сможете переопределить стиль уже созданньІх кнопок, например в QMessageBox.
Также не нужно рисовать
всю кнопку: надпись гораздо проще и функциональнее рисует стиль.
class ButtonPainter : public QObject
{
public:
void addButton( QAbstractButton * button )
{
button->installEventFilter( this );
}
protected:
bool eventFilter( QObject * o, QEvent * e )
{
QAbstractButton * button = qobject_cast<QAbstractButton*>( o );
if ( button && e->type() == QEvent::Paint )
{
QStyleOptionButton option;
option.initFrom( button );
QPainter p( button );
p.drawImage( QPoint( 0, 0 ), button->isDown() ? down_image : up_image );
QStylePainter( button ).drawControl( QStyle::CE_PushButtonLabel, option );
return true;
}
return false;
}
};