Получить подстроку 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).