我有一个QAbstractItemDelegate,在paint方法中,我试图从标签中绘制文本。但我看到的问题是QLabel的大小提示对于它包含的文本总是太小。我怎样才能解决这个问题?例如:
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());
然后它看起来像:
为什么边界矩形太小了? 谢谢 斯蒂芬
答案 0 :(得分:5)
如果你只是想绘制一个边界矩形(或相关的东西),你应该得到画家的字体指标,并要求你想要显示的文本的边界矩形。有QFontMetrics::boundingRect的不同版本允许您指定包含的矩形,因此将考虑自动换行。
答案 1 :(得分:1)
为什么不使用virtual QSize QLabel::sizeHint () const
来获取sizehint?它似乎更可靠,因为adjustSize();geometry()
取决于实际绘制到某物上的标签。但是你没有绘制标签(QWidget),只是它的文本(QString),所以adjustSize/geometry
比sizeHint
更容易失败。
请参阅:http://doc.qt.io/qt-4.8/qwidget.html#sizeHint-prop
编辑:哦,使用sizeHint
也会简化您的代码...