Получить подстроку QString по пикселям в Qt cpp

У меня есть QString чья длина пикселя я могу получить QFontmetrics::width() Также я могу иметь длину символа от QString от QString::length(), но здесь я намерен сократить QString по определенному количеству пикселей.

Есть ли способ получить подстроку из QString давая размер пикселя?

Спасибо!

1 ответ

Решение

Да, вы можете использовать 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).

Другие вопросы по тегам