Russian Qt Forum
Сентябрь 30, 2024, 20:28 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как узанть сколько строк убереться в QTextEdit?  (Прочитано 3764 раз)
Павел_F.
Гость
« : Ноябрь 27, 2009, 20:54 »

Есть QTextEdit. Нужно как-то посчитать сколько строк в него "влезут".
Если другими словами... Нужно вычислить сколько строк можно добавить в QTextEdit но чтобы не появился вертикальный скролл?
Сам QTextEdit ведь как-то определяет когда скролл показывать...
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #1 : Ноябрь 27, 2009, 21:01 »

Код:
QScrollBar * vs = edit->verticalScrollBar();
int numLines = vs->pageStep() / vs->singleStep();
Улыбающийся
Записан
spectre71
Гость
« Ответ #2 : Ноябрь 27, 2009, 22:20 »

Код:
QScrollBar * vs = edit->verticalScrollBar();
int numLines = vs->pageStep() / vs->singleStep();
Улыбающийся

Ошибочка Улыбающийся

pageStep(), singleStep() и LCPS("Line Count per Screen), в общем случае не связаны между собой, пример:
pageStep() = (LCPS+1)/2;
singleStep() = 3

=====

Кол-во видимых строк зависит от видимой области и текущих заданных от фонтов, расстояния между строками, итд. Все это определяется текущей реализации QTextEdit.
Надо посмотреть методы QTextEdit может есть определения текущего кол-ва строк, хотя судя по "приколам" троллей данные методы в привате.

Надо посмотреть реализацию!
Возможно что-нибудь простое:

QFontMetrics FontMetrics(font());
int LineHeight = FontMetrics.lineSpacing();
int FullLinesCount = TextScreenHeight/LineHeight;
int TotalLinesCount = (TextScreenHeight+LineHeight-1)/LineHeight;
Где:
TextScreenHeight - высота области для отисовки текста
FullLinesCount - кол-во полностью видимых строк
TotalLinesCount - кол-во видимых строк включая частично обрезанные верхнюю и/или нижнюю

Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #3 : Ноябрь 27, 2009, 22:42 »

Код:
QScrollBar * vs = edit->verticalScrollBar();
int numLines = vs->pageStep() / vs->singleStep();
Улыбающийся

Ошибочка Улыбающийся
Не вижу где - покажите Улыбающийся Подсчитывать размер самому нереально (а вдруг для этого параграфа установлен шрифт в 10 раз больше?) - пусть QTextEdit сам этим занимается, в любом случае он выставит разумное pageStep, а даже если (вдруг) это не так - результат будет не хуже чем в QTestEdit. A singleStep на деле почти всегда 1. Да, "в общем случае" singleStep может быть 100 а pageStep только 2. Но классы QTextEdit, QPlainTextEdit, QTextBrowser этого не делают
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.071 секунд. Запросов: 22.