QFontMetrics.width()没有在linux中返回正确的值

时间:2017-10-26 13:06:39

标签: c++ qt qt4

QString folderPath = "/home/Users"
Q_UNUSED(option);
Q_UNUSED(widget);

painter->setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing | QPainter::SmoothPixmapTransform);

painter->setPen(QPen(QColor(16,87,98),2));
painter->setBrush(Qt::NoBrush);

painter->drawRect(m_bounds);
m_pathItem->setPos(m_bounds.topLeft());

QFont font( "Calibri" );
font.setPixelSize(14);
font.setBold(false);
painter->setFont( font );

painter->setPen(QColor(16,87,98));

QFontMetrics fm = painter->fontMetrics();
fm.width(folderPath) // Returns 71 

当我使用下面的字符串时,返回的像素是不同的

QString folderPath = "/homeUsers!"
fm.width(folderPath) // Returns 73

这只发生在Linux,Windows工作正常

1 个答案:

答案 0 :(得分:0)

您正在使用比例字体计算文字的宽度,其中字符/!可能确实具有不同的宽度,因此" /的总宽度为家/用户"可能与" / homeUsers!"。

不同

显然,对于Windows字体Calibri而言,情况并非如此,该字体在Windows Vista及更高版本中可用。如果您没有在Linux中安装它,则会使用substitute,这可能会显示给定的行为。

推荐阅读:QFont的详细说明。重要的是

  

Qt将使用具有指定属性的字体,或者如果不存在匹配的字体,Qt将使用最接近的匹配安装字体。实际使用的字体属性可从QFontInfo对象中检索。