I had similar problems a couple of days ago. For example I noticed there is a difference in result between this call:
Qt Code:
  1. QSize s = QFontMetrics(...).boundingRect("Some text").size();
To copy to clipboard, switch view to plain text mode 
and this one:
Qt Code:
  1. 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.