I had similar problems a couple of days ago. For example I noticed there is a difference in result between this call:
QSize s = QFontMetrics(...).boundingRect("Some text").size();
To copy to clipboard, switch view to plain text mode
and this one:
QSize s = QFontMetrics(...).boundingRect(QRect(100, 100, 100, 100), 0, "Some text").size();
To copy to clipboard, switch view to plain text mode
Maybe try passing the real rect the text is to occupy, e.g. option.rect.adjusted(m_padding, m_padding, -m_padding, -m_padding). Maybe you'll get better results.
By the way, isn't the default delegate already wrapping lines in some cases?
Another solution would be to go through QTextLayout or QStaticText.
Bookmarks