I think a better approach here is to subclass the QPushButton and reimplement the paintEvent. Something like this
void PushButton::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
// Define pen
QPen pen;
pen.setWidth(4);
// Draw outer cover
pen.setColor(Qt::black);
painter.setPen(pen);
painter.setBrush(QColor(Qt::gray));
painter.drawRect(this->rect());
// Draw Inward arc
pen.setWidth(2);
painter.setPen(pen);
painter.setBrush(QColor(Qt::white));
int x = this->rect().x() - this->rect().width()/2;
int y = this->rect().y();
int w = this->rect().width();
int h = this->rect().height();
QRectF rectangle(x,y,w,h);
painter.drawRoundedRect(rectangle,w,h);
}
Keep in mind this is just an example, you should take other things into considerations like the size of widget and how much angle should be the inward cure and everything else.
