Ваша проблема в том, что QRegion в режиме визуализации c является прямоугольной angular областью.
void QWidget::render(QPaintDevice *target, const QPoint &targetOffset = QPoint(), const QRegion &sourceRegion = QRegion(), QWidget::RenderFlags renderFlags = RenderFlags(DrawWindowBackground | DrawChildren))
Qt Не знаете, как сделать округленную прямоугольную angular область, вы должны вычислить вручную этот регион вы можете начать с этой функции;)
QRegion computeRegion(QPushButton*button, int radius)
{
QRegion region(0, 0, button->width(),button->height(), QRegion::Rectangle);
/** top left */
QRegion round (0, 0, 2*radius, 2*radius, QRegion::Ellipse);
QRegion corner(0, 0, radius, radius, QRegion::Rectangle);
region = region.subtracted(corner.subtracted(round));
/** top right */
round = QRegion(button->width()-2*radius, 0, 2*radius, 2*radius, QRegion::Ellipse);
corner = QRegion(button->width()-radius, 0, radius, radius, QRegion::Rectangle);
region = region.subtracted(corner.subtracted(round));
/** bottom right */
round = QRegion(button->width()-2*radius, button->height()-2*radius, 2*radius, 2*radius, QRegion::Ellipse);
corner = QRegion(button->width()-radius, button->height()-radius, radius, radius, QRegion::Rectangle);
region = region.subtracted(corner.subtracted(round));
/** bottom left */
round = QRegion(0, button->height()-2*radius, 2*radius, 2*radius, QRegion::Ellipse);
corner = QRegion(0, button->height()-radius, radius, radius, QRegion::Rectangle);
region = region.subtracted(corner.subtracted(round));
return region;
}
затем использовать его в функции рендеринга
button->render(&pixmap,QPoint(),computeRegion(button,18));