1

我有一个QString我可以得到的谁的像素长度,我也可以有一个来自by 的QFontmetrics::width()字符长度,但在这里我打算削减特定数量的像素。QStringQString::length()QString

有没有办法QString通过给出像素大小来获得子字符串?

谢谢!

4

1 回答 1

0

是的,您可以QFontMetrics::elidedText这样做。例如,要剪切 200 像素,请使用:

QString cutString = yourFontMetrics.elidedText(someString, Qt::ElideNone, 200);

第二个参数表示剪切模式(此处有更多值)。

更新:我不确定这是否是 Qt 中的错误(对我来说是 Qt 5.10.0),但确实Qt::ElideNone返回相同的字符串。这里有一个解决方法:

QString cutString(const QString& str, const QFontMetrics& fm, int pixels)
{
  const QChar ellipsis(0x2026);
  if (fm.width(str) <= pixels) return str;
  auto tmpStr = fm.elidedText(str, Qt::ElideRight, pixels + fm.width(ellipsis));
  return tmpStr.left(tmpStr.length() - 1);
}

在这里可以找到一个完整的工作示例(您需要将文件添加到新的 Qt 项目)。

于 2018-08-06T06:18:07.943 回答