Столкнулся с подобной проблемой. По-скольку в троллевском баг-трекере стоит "Priority: No Priority, Scheduled for: Not scheduled", решил побороть проблему самостоятельно.
На сколько смог понять баг кроется в QPainter::drawText(const QPointF &p, const QString &str, int tf, int justificationPadding), который, кстати, не смотря на публичность не документирован.
В его дебри решил не лезть, вместо этого сделал следующие исправления:
/src/3rdparty/webkit/WebCore/platform/graphics/qt/FontQt.cpp
было:
C++ (Qt)
QPointF pt(point.x(), point.y());
int flags = run.rtl() ? Qt::TextForceRightToLeft : Qt::TextForceLeftToRight;
if (hasShadow) {
// TODO: text shadow blur support
p->save();
p->setPen(QColor(shadowColor));
p->translate(shadowSize.width(), shadowSize.height());
p->drawText(pt, string, flags, run.padding());
p->restore();
}
p->drawText(pt, string, flags, run.padding());
стало:
C++ (Qt)
QTextLayout layout(string, font());
QTextLine line = setupLayout(&layout, run);
QPointF pt(point.x(), point.y());
int flags = run.rtl() ? Qt::TextForceRightToLeft : Qt::TextForceLeftToRight;
if (hasShadow) {
// TODO: text shadow blur support
p->save();
p->setPen(QColor(shadowColor));
p->translate(shadowSize.width(), shadowSize.height());
line.draw(p, pt);
p->restore();
}
line.draw(p, pt);
Т.е. строки отрисовываются через QTextLine::draw(...), который работает корректно (было замечено по строкам с выделением).
Не уверен в корректности этого решения, т.к. QTextLine::draw(...) внутри выглядит пугающе
Думаю может сказаться на производительности, но лично я визуально потерь не заметил.
Но в любом случае, можете пользоваться и отписать об этом решении троллям (самому лениво на инглиш переводить)
Если не поленитесь Вы, то не забудьте упоминуть, что баг кроется именно в QPainter::drawText(..., int justificationPadding). Думаю сами они быстрее с ним разберутся