у меня есть QString
чья длина пикселя я могу получить QFontmetrics::width()
Также я могу иметь длину символа от QString
от QString::length()
, но здесь я намерен резать QString
по определенному количеству пикселей.
Есть ли способ получить подстроку из QString
давая размер пикселя?
Спасибо!
Да, вы можете использовать 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).
Других решений пока нет …