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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [4.x.x] Прокрутить Q*TextEdit к строке, чтобы она оказалаl  (Прочитано 5073 раз)
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« : Ноябрь 27, 2012, 11:49 »

Есть возможность отцентрировать курсор
Код
C++ (Qt)
veiw->setTextCursor(cursor)
veiw->centerCursor()
 
А вот как сделать так, чтобы курсор оказался первой видимой строкой?
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Kolobok
Гость
« Ответ #1 : Ноябрь 27, 2012, 19:33 »

Код:
veiw->verticalScrollBar()->setValue(veiw->verticalScrollBar()->value() + veiw->cursorRect().y());
не?
Записан
vregess
Гость
« Ответ #2 : Ноябрь 27, 2012, 20:38 »

Если я правильно понял, тебе придется самому. Можно попробовать QTextLayout, QTextLine, если вариант Колобка не поможет.
« Последнее редактирование: Ноябрь 27, 2012, 20:41 от ck » Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #3 : Ноябрь 28, 2012, 07:36 »

Код:
veiw->verticalScrollBar()->setValue(veiw->verticalScrollBar()->value() + veiw->cursorRect().y());
не?
Не. У скроллбара измерение не в пикселах идет.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Kolobok
Гость
« Ответ #4 : Ноябрь 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);
Записан
_OLEGator_
Гость
« Ответ #5 : Ноябрь 28, 2012, 12:12 »

Не. У скроллбара измерение не в пикселах идет.
А когда я давненько с сколлбаром работал, то помнится как раз там значения совпадали с размерностью виджетов, то есть таки в пикселях.
Записан
Kolobok
Гость
« Ответ #6 : Ноябрь 28, 2012, 12:21 »

Не. У скроллбара измерение не в пикселах идет.
А когда я давненько с сколлбаром работал, то помнится как раз там значения совпадали с размерностью виджетов, то есть таки в пикселях.

Я сейчас смотрел. У QPlainTextEdit совпадает с количеством строк. Плавного скроллинга нету (
Записан
_OLEGator_
Гость
« Ответ #7 : Ноябрь 28, 2012, 13:33 »

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

Да, для QPlainTextEdit придется поколдовать, возможно пересчитывать из высоты строк и т.п. Для QTextEdit все четко по пикселям, соответственно прокрутка плавная.
Можно глянуть в сорцах, как работает
Код
C++ (Qt)
void QPlainTextEdit::centerCursor () [slot]
« Последнее редактирование: Ноябрь 28, 2012, 13:35 от _OLEGator_ » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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