可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I have a QAbstractItemDelegate and in the paint method, I am trying to paint the text from a label. But the problem I am seeing is that the size hint of the QLabel is always too small for the text it contains. How can I fix this? For example:
QLabel *testlabel = new QLabel(); testlabel->setText("This is some test text that doesnt fit:"); testlabel->adjustSize(); QRect rect(testlabel->geometry()); Qt::Alignment alignFlags = testlabel->alignment(); painter->setFont(testlabel->font()); painter->drawRect(rect); painter->drawText(rect, alignFlags, testlabel->text());
And then it looks like:
Any ideas why the bounding rectangle is too small? Thanks Stephen
回答1:
If you are just trying to draw a bounding rectangle (or something related), you should get the painter's font metrics and ask for a bounding rectangle for the text you want to display. There are different versions of QFontMetrics::boundingRect that will allow you to specify a containing rectangle so word wrapping will be taken into consideration.
回答2:
why don't you use virtual QSize QLabel::sizeHint () const
for getting the sizehint? it seems to be more reliable, because adjustSize();geometry()
depends on the label being actually drawn onto something. but you don't draw the label (QWidget), but only it's text (QString), so adjustSize/geometry
are more likely to fail than sizeHint
.
see: http://doc.qt.io/qt-4.8/qwidget.html#sizeHint-prop
EDIT: oh, and using sizeHint
would also simplify your code...