В
arcTo() ставишь не те значения результирующих точек, в результате паинтер закручивает их в другую сторону. Вот пример скруглённого прямоугольника личного приготовления (s - радиус дуг):
void draw_round_frame( QPainter & p, const QRect & r, int s )
{
p.save();
p.translate( r.left(), r.top() );
QPainterPath path;
path.moveTo( s, 0 );
path.arcTo( 0, 0, s*2, s*2, 90, 90 );
path.arcTo( 0, r.height() - s*2, s*2, s*2, 180, 90 );
path.arcTo( r.width() - s*2, r.height() - s*2, s*2, s*2, 270, 90 );
path.arcTo( r.width() - s*2, 0, s*2, s*2, 0, 90 );
path.closeSubpath();
p.drawPath( path );
p.restore();
}