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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Класс, унаследованный от QTextEdit. Не могу обновить изображение текста.  (Прочитано 3943 раз)
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« : Июнь 19, 2009, 10:36 »

Здравствуйте!


В соседней теме

QTextEdit - как показать невидимые символы (пробелы, табы, переводы строк)
http://www.prog.org.ru/topic_9783_0.html

обсудили, как поверх текста рисовать символы разметки текста. Символы разметки рисуются. Для этого у меня используется класс EditorTextArea, унаследованный от QTextEdit, и в котором переопределён метод paintEvent().


Но теперь встала другая проблема. Есть кнопочка, которая включает/выключает отображение символов разметки текста. При её нажатии нужно обновить виджет так, чтоб вся область текста, и символы разметки поверх, обновились (т.е. символы разметки должны либо появиться, либо пропасть).

Я делаю так

Код:
void EditorTextArea::set_showformatting(bool i)
{
 showformatting_flag=i;

 int w=viewport()->width(), h=viewport()->height();
 QTextEdit::update(0,0,w,h);
 QTextEdit::repaint(0,0,w,h);
 update(0,0,w,h);
 repaint(0,0,w,h);
}

void EditorTextArea::paintEvent(QPaintEvent *event)
{
 // Отрисовка родительского класса
 QTextEdit::paintEvent(event);

 // Если символы форматирования ненужно рисовать
 if(showformatting_flag==false) return;

 // Рисуются символы форматирования
 ...
}

При вызове метода set_showformatting(), картинка на экране, по идее, должна обновиться. Но этого не происходит. Обновляется только та часть текста, которая появляется новой на экране (если, например, покрутить прокрутку). То есть, если, к примеру, включить отображение символов форматирования set_showformatting(true), то на экране они не покажутся. И если начать скроллировать текст, то на новом появляющемся тексте символы форматирования будут видны. А нужно, чтобы были стали видны сразу, на всём отображаемом в данный момент тексте.

Я пробовал вызывать update() и repaint() без параметров, и вызывать как слоты через emit. Результат везде одинаковый - обновления не происходит.


Вопрос - как принудительно обновить область виджета, чтобы он полностью перерисовался?
Записан

Собираю информацию по крупицам
http://webhamster.ru
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #1 : Июнь 19, 2009, 10:44 »

viewport()->update() пробовал?
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« Ответ #2 : Июнь 19, 2009, 12:13 »

viewport()->update() пробовал?

Во, таг работает.
Записан

Собираю информацию по крупицам
http://webhamster.ru
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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