Чтобы увеличить QPainterPath на x
пикселей, вы можете использовать QPainterPathStroker с ручкой шириной 2*x
, а затем объединить оригинал с обведенным контуром:
QPainterPath grow( const QPainterPath & pp, int amount ) {
QPainterPathStroker stroker;
stroker.setWidth( 2 * amount );
const QPainterPath stroked = stroker.createStroke( pp );
return stroked.united( pp );
}
Обратите внимание, однако, что начиная с Qt 4.7, функция united()
(и аналогичные операции над множествами) превращает пути в полилинии, чтобы обойти числовую нестабильность в коде пересечения путей. Хотя это хорошо для рисования (не должно быть никакой видимой разницы между этими двумя методами), если вы намереваетесь сохранить QPainterPath, например, чтобы разрешить дальнейшие операции над ним (вы упомянули Photoshop), тогда это уничтожит все кривые Безье в нем, что, вероятно, не то, что вы хотели.