对于Qt 4.6.x,如何自动调整文本大小以适应指定的宽度?

Dar*_*ren 17 qt font-size autosize

在我的QGraphicsRectItem :: paint()中,我试图在其rect()中绘制项目的名称.但是,对于每个不同的项目,它们可以具有可变的宽度,并且类似的名称可以具有可变长度.

目前我开始使用最大字体大小,检查它是否适合和减少它,直到我找到适合的字体大小.到目前为止,我还没有找到一种快速简便的方法来做到这一点.是否有更好或更有效的方法来做到这一点?

谢谢!

void checkFontSize(QPainter *painter, const QString& name) {
 // check the font size - need a better algorithm... this could take awhile
 while (painter->fontMetrics().width(name) > rect().width()) {
  int newsize = painter->font().pointSize() - 1;
  painter->setFont(QFont(painter->font().family(), newsize));
 }
}
Run Code Online (Sandbox Code Playgroud)

Dar*_*ren 14

来自qtcentre.org的Johannes提供了以下解决方案:

float factor = rect().width() / painter->fontMetrics().width(name);
 if ((factor < 1) || (factor > 1.25))
 {
  QFont f = painter->font();
  f.setPointSizeF(f.pointSizeF()*factor);
  painter->setFont(f);
 }
Run Code Online (Sandbox Code Playgroud)

我在我的程序中试了一下,到目前为止,它看起来效果很好.我喜欢它,因为它在一次传递中产生结果,但它假设字体宽度像它的高度一样缩放.

http://www.qtcentre.org/threads/27839-For-Qt-4-6-x-how-to-auto-size-text-to-fit-in-a-specified-width