crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V  < 1 2  
Ответить в данную темуНачать новую тему
> [Не решено]QTextEdit + AutoScroll
Rocky
  опции профиля:
сообщение 1.2.2011, 18:51
Сообщение #11


Старейший участник
****

Группа: Участник
Сообщений: 530
Регистрация: 22.12.2008
Из: Санкт-Петербург
Пользователь №: 463

Спасибо сказали: 22 раз(а)




Репутация:   7  


Цитата(breeve @ 1.2.2011, 15:54) *
info->setText(str);

А QTextEdit::append(...) если вызывать?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 1.2.2011, 18:58
Сообщение #12


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


QTextEdit *edit; // assuming this is your text edit
QScrollBar *sb = edit->verticalScrollBar();
sb->setValue(sb->maximum());

как то так

или
QTextCursor c = textEdit->textCursor();
c.movePosition(QTextCursor::End);
textEdit->setTextCursor(c);


Сообщение отредактировал RazrFalcon - 1.2.2011, 19:01
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
breeve
  опции профиля:
сообщение 1.2.2011, 19:49
Сообщение #13


Участник
**

Группа: Участник
Сообщений: 188
Регистрация: 26.12.2009
Пользователь №: 1336

Спасибо сказали: 9 раз(а)




Репутация:   1  


Цитата(Rocky @ 1.2.2011, 18:51) *
А QTextEdit::append(...) если вызывать?

Если вызвать append(), то курсор он не меняет так как надо, но текст у меня обновляеться целиком, а не добавляеться(новый то он добавляеться но еще и старый обновляеться)), в конец не получится его вставлять.
Поэтому нужен setText с курсором как у append'а.

Цитата(RazrFalcon @ 1.2.2011, 18:58) *
QTextEdit *edit; // assuming this is your text edit
QScrollBar *sb = edit->verticalScrollBar();
sb->setValue(sb->maximum());

как то так

Это я как понимаю ставить курсор в конец

Цитата
или
QTextCursor c = textEdit->textCursor();
c.movePosition(QTextCursor::End);
textEdit->setTextCursor(c);


А это не работает(


Сообщение отредактировал breeve - 1.2.2011, 19:42
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 1.2.2011, 20:22
Сообщение #14


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


Какой курсор? Это скролбар.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 1.2.2011, 22:07
Сообщение #15


фрилансер
******

Группа: Участник
Сообщений: 2941
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


Цитата(breeve @ 1.2.2011, 16:35) *
Есть TextEdit, каждый раз когда вставляю в него текст - он автоматом поднимает скролл вверх. Поскольку вставляю оч. быстро, то я вообще не могу сдвинуть его с начальной позиции. Как убрать автоскролл?

а текст всегда меняется или редко ? Если редко, то сделай проверку на равенство устанавливаеого текста и старого - и не загружай, если текст такой же. По крайней мере без нужды дёргаться не будет
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
abc
  опции профиля:
сообщение 1.2.2011, 22:15
Сообщение #16


Участник
**

Группа: Участник
Сообщений: 221
Регистрация: 16.12.2010
Из: СПб
Пользователь №: 2272

Спасибо сказали: 26 раз(а)




Репутация:   4  


Цитата(RazrFalcon @ 1.2.2011, 20:22) *
Если вызвать append(), то курсор он не меняет так как надо, но текст у меня обновляеться целиком, а не добавляеться(новый то он добавляеться но еще и старый обновляеться)), в конец не получится его вставлять.

append добавляет текст в конец с новой строки. Не понимаю, что у тебя происходит. Опять же возвратимся к тому, какой вопрос решаем: если хочешь, чтобы скрол показывал конец текста, то аппенд вполне сойдёт. но если не хочешь, чтобы текст добавлялся с новой строки, тогда setText(textedit.text()+новый текст) и поставить курсор в конец текста. Но если всё же хочется "освободить" скролл от домогательств аппенда или сеттекста вообще, то тут нужно постараться)
а ведь задача нужная, потому что действительно бывает необходимость - например, в чате посмотреть, что писано выше, а каждое новое сообщение срывает тебя к себе. надо решать)
я пытался сделать так:
int val=textedit.verticalScrollBar().value();
textedit.append(текст);
textedit.verticalScrollBar().setValue(val);
если поставить скрол в какое-то положение, то он будет там стоять, но вот с его движением, особенно если текст приходит быстро, проблемы :)

Сообщение отредактировал abc - 1.2.2011, 22:16
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
abc
  опции профиля:
сообщение 1.2.2011, 23:56
Сообщение #17


Участник
**

Группа: Участник
Сообщений: 221
Регистрация: 16.12.2010
Из: СПб
Пользователь №: 2272

Спасибо сказали: 26 раз(а)




Репутация:   4  


хммм, если во время аппендов тыкнуть в текстэдит, то скролл перестаёт перемещаться в конец, остаётся стоять на месте и прекрасно реагирует на пользовательские махинации
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
breeve
  опции профиля:
сообщение 3.2.2011, 14:11
Сообщение #18


Участник
**

Группа: Участник
Сообщений: 188
Регистрация: 26.12.2009
Пользователь №: 1336

Спасибо сказали: 9 раз(а)




Репутация:   1  


Цитата(Алексей1153 @ 1.2.2011, 22:07) *
а текст всегда меняется или редко ? Если редко, то сделай проверку на равенство устанавливаеого текста и старого - и не загружай, если текст такой же. По крайней мере без нужды дёргаться не будет
Текст меняеться всегда и оч быстро.
Цитата(abc)
Не понимаю, что у тебя происходит.
Насчет append'а - текст он добавляет в конец, но мне так не нужно, мне нужно обновлять текст целиком, значения меняються то в начале текста, то в конце, то в середине, потому и использую setText() а не append().
В скролл в конец текста это на крайний случай, с этим я уже разобрался и понял как делать, мне нужно чтобы пользователь мог скролить.
и еще как я понимаю setText() == clear() + append()
потомуто и когда вызываешь append() курсор не сбрасываеться, а если очистить то естественно он уйдет в начало.
Цитата(abc)
хммм, если во время аппендов тыкнуть в текстэдит, то скролл перестаёт перемещаться в конец, остаётся стоять на месте и прекрасно реагирует на пользовательские махинации
Это в каком случае? На текстЕдит не тыкал.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
breeve
  опции профиля:
сообщение 3.2.2011, 15:13
Сообщение #19


Участник
**

Группа: Участник
Сообщений: 188
Регистрация: 26.12.2009
Пользователь №: 1336

Спасибо сказали: 9 раз(а)




Репутация:   1  


Цитата
int val=textedit.verticalScrollBar().value();
textedit.setText(текст);
textedit.verticalScrollBar().setValue(val);

Сделал так - отлично передвигать можно. Но не за сам ползунок, а только нажимая на стрелочки и ниже или выше ползунка.

Сообщение отредактировал breeve - 3.2.2011, 15:13
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
abc
  опции профиля:
сообщение 4.2.2011, 15:33
Сообщение #20


Участник
**

Группа: Участник
Сообщений: 221
Регистрация: 16.12.2010
Из: СПб
Пользователь №: 2272

Спасибо сказали: 26 раз(а)




Репутация:   4  


Цитата(breeve @ 3.2.2011, 14:11) *
Это в каком случае? На текстЕдит не тыкал.

тыкни :) курсор остаётся стоять там, где тыкнули, и скролл больше не рвётся в конец, но работает только в случае append, с сеттекстом не катит, потому что да, тот очищает. Если бы тебе подошёл аппенд, я бы предложил после первого аппенда установить курсор программно, например, в начало:
TextEdit->moveCursor(QTextCursor::Start);
Получаем, что хотели - ползунок наш)
Ну, а с сеттекстом, думаю, нужно наследовать QScrollBar, менять его виртуальные функции и устанавливать текстэдиту этот свой скроллбар. Такие мысли

Цитата(breeve @ 3.2.2011, 15:13) *
Сделал так - отлично передвигать можно. Но не за сам ползунок, а только нажимая на стрелочки и ниже или выше ползунка.

да, потому что изменения value происходят моментально. А, когда тянешь за скролл, его value не меняется, а меняется, только когда отпускаешь. А текст приходит и меняет его раньше, чем мы отпускаем, вот и не выходит нам улыбки :unknown: А, может, всё не так :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V  < 1 2
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 26.11.2024, 2:30