Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Пантер от Ноябрь 27, 2012, 11:49



Название: [4.x.x] Прокрутить Q*TextEdit к строке, чтобы она оказалаl
Отправлено: Пантер от Ноябрь 27, 2012, 11:49
Есть возможность отцентрировать курсор
Код
C++ (Qt)
veiw->setTextCursor(cursor)
veiw->centerCursor()
 
А вот как сделать так, чтобы курсор оказался первой видимой строкой?


Название: Re: [4.x.x] Прокрутить Q*TextEdit к строке, чтобы она оказалаl
Отправлено: Kolobok от Ноябрь 27, 2012, 19:33
Код:
veiw->verticalScrollBar()->setValue(veiw->verticalScrollBar()->value() + veiw->cursorRect().y());
не?


Название: Re: [4.x.x] Прокрутить Q*TextEdit к строке, чтобы она оказалаl
Отправлено: vregess от Ноябрь 27, 2012, 20:38
Если я правильно понял, тебе придется самому. Можно попробовать QTextLayout, QTextLine, если вариант Колобка не поможет.


Название: Re: [4.x.x] Прокрутить Q*TextEdit к строке, чтобы она оказалаl
Отправлено: Пантер от Ноябрь 28, 2012, 07:36
Код:
veiw->verticalScrollBar()->setValue(veiw->verticalScrollBar()->value() + veiw->cursorRect().y());
не?
Не. У скроллбара измерение не в пикселах идет.


Название: Re: [4.x.x] Прокрутить Q*TextEdit к строке, чтобы она оказалаl
Отправлено: Kolobok от Ноябрь 28, 2012, 12:07
А, да. Тогда только хардкор, как ck написал. Примерно так:

Код:
QTextCursor cursor = veiw->textCursor();
QTextBlock cursorBlock = cursor.block();
QTextLine cursorLine = cursorBlock.layout()->lineForTextPosition(cursor.positionInBlock());
int row = cursorBlock.firstLineNumber() + cursorLine.lineNumber();
veiw->verticalScrollBar()->setValue(row);


Название: Re: [4.x.x] Прокрутить Q*TextEdit к строке, чтобы она оказалаl
Отправлено: _OLEGator_ от Ноябрь 28, 2012, 12:12
Не. У скроллбара измерение не в пикселах идет.
А когда я давненько с сколлбаром работал, то помнится как раз там значения совпадали с размерностью виджетов, то есть таки в пикселях.


Название: Re: [4.x.x] Прокрутить Q*TextEdit к строке, чтобы она оказалаl
Отправлено: Kolobok от Ноябрь 28, 2012, 12:21
Не. У скроллбара измерение не в пикселах идет.
А когда я давненько с сколлбаром работал, то помнится как раз там значения совпадали с размерностью виджетов, то есть таки в пикселях.

Я сейчас смотрел. У QPlainTextEdit совпадает с количеством строк. Плавного скроллинга нету (


Название: Re: [4.x.x] Прокрутить Q*TextEdit к строке, чтобы она оказалаl
Отправлено: _OLEGator_ от Ноябрь 28, 2012, 13:33
Я сейчас смотрел. У QPlainTextEdit совпадает с количеством строк. Плавного скроллинга нету (

Да, для QPlainTextEdit придется поколдовать, возможно пересчитывать из высоты строк и т.п. Для QTextEdit все четко по пикселям, соответственно прокрутка плавная.
Можно глянуть в сорцах, как работает
Код
C++ (Qt)
void QPlainTextEdit::centerCursor () [slot]