Лучшее, что Qt может предложить в этом отношении - это отдельные радиусы округления x и y. Так что ничего такого, что сделает это за вас, не будет.
Кажется, что способ получить эту геометрию состоит в том, чтобы использовать QPainterPath
для составления фигуры из нескольких подкомпонентов, в вашем случае дуги для радиуса и 3 линий для остальных.
Вы должны быть в состоянии перевести и отразить художника, чтобы нарисовать другую сторону. Таким образом, вы заполняете и обрисовываете левую сторону, затем переворачиваете художника и обрисовываете правую сторону.
Кроме того, в случае, если вы рисуете что-то вроде, например, индикатора выполнения, существует другой способ действий. Вы нарисуете прямоугольник с закругленными углами и будете использовать его в качестве маски, а затем сможете заполнить нужное количество, нарисовав прямоугольник, который будет обрезан в желаемой форме с помощью маски.
ОК, похоже, вам понадобится дополнительная помощь, вот рабочий код, который вы можете настроить:
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
QPainterPath path;
// compose the "half"
path.moveTo(20, 0);
path.lineTo(100, 0);
path.lineTo(100, 40);
path.lineTo(20, 40);
path.arcTo(0, 0, 40, 40, -90, -180);
// draw black half
painter.setBrush(Qt::black);
painter.setPen(QPen(Qt::black, 1));
painter.drawPath(path);
// mirror and reposition the painter
QTransform mirror(-1, 0, 0, 0, 1, 0, 0, 0, 1);
painter.setTransform(mirror);
painter.translate(-200, 0);
// draw white half
painter.setBrush(Qt::white);
painter.drawPath(path);