Qt рисование выделенного текста с помощью QPainterPath

я должен нарисовать набросок зачеркнутый текст на QImage, как это:

введите описание изображения здесь

Я делаю это следующим образом:

QPainter painter(this);

QPainterPath path;

QFont font;
font.setPixelSize(95);
font.setStrikeOut(true);
font.setBold(true);

path.addText(10, 150, font, "lololo");

painter.setPen(Qt::blue);
painter.setBrush(Qt::red);

painter.drawPath(path);

и получить этот результат:

введите описание изображения здесь

Как можно видеть, выделяющаяся линия имеет зебраподобную заливку. Как я могу полностью заполнить его кистью художника?

Я попытался изменить режим композиции QPainter безуспешно. Также я попытался использовать QPainterPathStroker с тем же результатом.

Конечно, я могу нарисовать зачеркнутый текст обычным шрифтом (не зачеркнутым) плюс прямоугольник, но это не очень хорошее решение.

1

Решение

Решение состоит в том, чтобы выполнять операции между двумя путями с и без удара:

#include <QtWidgets>

int main(int argc, char *argv[])
{
QApplication a(argc, argv);

QImage image(300, 200, QImage::Format_ARGB32);
image.fill(Qt::transparent);

QPoint p(30, 150);
QString text = "lololo";

QFont font;
font.setPixelSize(95);
font.setBold(true);

QPainterPath path1;
font.setStrikeOut(true);
path1.addText(p, font, text);
font.setStrikeOut(false);
QPainterPath path2;
path2.addText(p, font, text);

QPainterPath strike = (path1 + path2) - (path1 & path2);
//                      \---join---/    \-intersection-/
QPainter painter(&image);
painter.setRenderHint(QPainter::Antialiasing);
painter.setPen(Qt::blue);
painter.setBrush(Qt::red);
painter.drawPath(path2);
painter.drawPath(strike);
painter.end();

QLabel w;
w.setPixmap(QPixmap::fromImage(image));
w.show();

return a.exec();
}

введите описание изображения здесь

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]