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

标签 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));
 }
}

最佳答案

来自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);
 }


我在程序中进行了尝试,到目前为止,它似乎运行良好。我喜欢它,因为它可以一次性生成结果,但是它假定字体宽度像其高度一样缩放。

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

关于qt - 对于Qt 4.6.x,如何自动调整文本大小以适合指定的宽度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2202717/

相关文章:

c++ - 无法分配给 qstring 变量

c++ - 在程序启动时选择不同的 QMainWindow 但面临奇怪的 QMessageBox exec() 行为

c++ - QListView 高度根据内容

google-chrome - 禁用 Chrome 最小字体大小 10px

Java - 在 JEditorPane 中设置选择的字体大小?

c# - 在自定义控件上实现 AutoSize 的最佳做法是什么?

macos - 连接Qt与 cocoa

CSS:数字宽度是 em 还是 ex?

wpf - 如何在WPF中将宽度设置为100%

cocoa - addSubview 和自动调整大小