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

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]