Название: QLabel - как получить размер height после изменения текста? Отправлено: PavelVX от Ноябрь 21, 2011, 09:53 Вопрос возник вот из-за чего: пишу систему печати: http://www.prog.org.ru/topic_19872_0.html. Понадобилось узнать, сколько строчек будет занимать текст, что бы правильно формировать разбивку постранично. Длинну текста посимвольно узнать не проблема, а вот размер физического места проблема. Решил сделать такой трюк:
QLabel * labelTst = new QLabel(this); labelTst->setWordWrap(true); labelTst->setFixedWidth(100); Вставляем текст и вуаля, физический размер. Но возникла странная проблема: qDebug() << QString("before %1 - %2").arg(editTst->text()).arg(labelTst->height()); labelTst->setText(editTst->text()); labelTst->update(); labelTst->updateGeometry(); qDebug() << QString("after %1 - %2").arg(editTst->text()).arg(labelTst->height()); Показывает одинаковый размер! А при перевызове этой функции, покажет правильный размер для старого текста. Т.е., если я правильно понимаю, то виджет не успел перерисоваться, а я уже спрашиваю новый размер виджета. Как это побороть? Или есть более элегантное решение проблемы получания физического размера текста? Название: Re: QLabel - как получить размер height после изменения текста? Отправлено: iroln от Ноябрь 21, 2011, 12:08 Можно повесить на QLabel фильтр событий и ловить событие QEvent::Resize. После того, как это событие приходит, должен быть получен уже изменённый размер виджета. Либо можно наследоваться от QLabel и переопределить метод resizeEvent. Первый вариант просто позволяет избежать наследования.
Или я что-то не так понимаю и тут совсем другая проблема? Название: Re: QLabel - как получить размер height после изменения текста? Отправлено: Kolobok от Ноябрь 21, 2011, 12:15 QTextDocument
Название: Re: QLabel - как получить размер height после изменения текста? Отправлено: PavelVX от Ноябрь 21, 2011, 12:56 А QTextDocument-то как сюда прикрутить?
С QLabel QEvent::Resize как-то геморойно связываться :(. Получается так: 1. получаем строку из рекордсета 2. Отправляем её в QLabel 3. ждем непонятно чего 4. В фильтре получаем инфу о ресайзе QLabel 5. В печати делаем нужный отступ 6. Запрашиваем новую строку в рекордсете. Как-то громоздко :(. Название: Re: QLabel - как получить размер height после изменения текста? Отправлено: marbius от Ноябрь 21, 2011, 14:06 Здравствуйте.
Не совсем уверен в решении (не на чем сейчас проверить), но попробуйте вставить Ваш QLabel в QVBoxLayout, а после смены текста вызвать QLabel::adjustSize() А вообще как пишет Kolobok, наверное, как-то так правильнее: Код
Название: Re: QLabel - как получить размер height после изменения текста? Отправлено: PavelVX от Ноябрь 22, 2011, 07:08 Тогда извиняюсь за ламерский вопрос: а в чем измеряется QSizeF? В пикселях?
QSizeF(100, 21) - это при пустой строке или одно слово в QLabel QSizeF(100, 34) - две строки в QLabel QSizeF(100, 47) - три строки в QLabel QSizeF(100, 60) - четыре строки в QLabel Разница в 13 единиц, почему тогда стартовя 21, а не 13? Запасы на отступы до и после текста? |