Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Павел_F. от Ноябрь 27, 2009, 20:54



Название: Как узанть сколько строк убереться в QTextEdit?
Отправлено: Павел_F. от Ноябрь 27, 2009, 20:54
Есть QTextEdit. Нужно как-то посчитать сколько строк в него "влезут".
Если другими словами... Нужно вычислить сколько строк можно добавить в QTextEdit но чтобы не появился вертикальный скролл?
Сам QTextEdit ведь как-то определяет когда скролл показывать...


Название: Re: Как узанть сколько строк убереться в QTextEdit?
Отправлено: Igors от Ноябрь 27, 2009, 21:01
Код:
QScrollBar * vs = edit->verticalScrollBar();
int numLines = vs->pageStep() / vs->singleStep();
:)


Название: Re: Как узанть сколько строк убереться в QTextEdit?
Отправлено: spectre71 от Ноябрь 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 - кол-во видимых строк включая частично обрезанные верхнюю и/или нижнюю



Название: Re: Как узанть сколько строк убереться в QTextEdit?
Отправлено: Igors от Ноябрь 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 этого не делают