LINUX.ORG.RU

Как посчитать максимальную часть строки, которая вместится в QLabel

 ,


0

2

В общем, мне нужен аналог QFontMetrics::elidedText, но умеющий высоту, а не только ширину, мультистрочный, с WordWrap. Возможно, есть аналоги из некуте библиотек, но мне такие не известны. Самому писать - непонятно какой тут алгоритм, особенно с учётом праволевных алфавитов (например, арабского).

В частности, непонятно, какие бывают разделители строки. Доки к Юникоду говорят, что не только \n. Но как с этим всем работать и как с этим всем работает QLabel - непонятно.

★★★★★

Что ты хочешь? Узнать какую высоту необходимо для QLabel с заданной шириной и текстом? Если так то есть int QLabel::heightForWidth(int w) const. Узнать как он это вычисляет? Так исходники открыты можешь посмотреть как реализовано.

V1KT0P ★★
()
Ответ на: комментарий от next_time

Я хочу обратного: у меня фиксированные размеры QLabel, хочу найти текст, который туда влезет

Самый простой способ бинарным поиском, медленно и неэффективно зато не надо заморачиваться(учти что символ может состоять из нескольких unicode-символов(codepoint) и их нельзя делить как пример буква «й» может состоять как из одного codepoint так и из двух). Если же шрифт monospace и нет символов занимающих больше одного знакоместа(как пример азиатские иероглифы), тогда можно легко посчитать, иначе надо будет еще с этим заморочиться.

Так при ручном подсчете столкнешся с тем что начало следующего символа может быть дробным пикселем. Это легко проверить в разных редакторах пишешь длинную строку из одного символа и видишь что иногда между некоторыми из них расстояние отличается на пиксель. Также два символа могут сливаться в один меняя при этом общий размер(и зависит это от конкретного шрифта).

Если хочешь заморочить эффективность то смотришь как реализован подсчет размера в QLabel и просто копируешь его добавляя проверку что очередной символ не вылез за пределы нужного размера.

V1KT0P ★★
()