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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QTextEdit - выделение текста с помощью QTextCursor и функция setCharFormat()  (Прочитано 299 раз)
Rododendron
Новичок

Offline Offline

Сообщений: 4


Просмотр профиля
« : Июль 10, 2017, 11:12 »

Имеется 2 функции: одна выделяет текущий найденный текст стандартным синим цветом, вторая выделяет найденный текст по всему виджету голубеньким.

В первой функции выделение текста происходит т.о.:
Код:
QTextCursor cursor=edit->textCursor();
cursor.setPosition(pos);
cursor.setPosition(pos+searched.length(),QTextCursor::KeepAnchor);
edit->setTextCursor(cursor);

Во второй функции так (я привожу часть кода, здесь это происходит в цикле по всему виджету):
Код:
cursor.setPosition(pos);
cursor.setPosition(pos+searched.length(),QTextCursor::KeepAnchor);
QTextCharFormat charFormat = cursor.charFormat();
charFormat.setBackground(QColor(150, 200, 250));
cursor.setCharFormat(charFormat);

При этом вот какую странность я обнаружил: в первом случае обязательно писать:
Код:
edit->setTextCursor(cursor);

Оно и понятно, мы получили копию QTextCursor и, чтобы его применить к QTextEdit, нам нужно вызвать эту функцию.
Но во второй функции почему-то работает без этого, когда мы вызываем setCharFormat.

Так вот. Проблема в том, что во второй функции выделение накапливается и не сбрасывается, когда меняется поисковый запрос, а в первой функции все нормально.
Пытался решить эту проблему с помощью функции clearSelection() перед циклом с выделением, но не помогло. Помогло другое. Перед циклом я выделил весь текст и задал ему фоновый цвет такой, какой был:
Код:
cursor.setPosition(0);
cursor.setPosition(edit->toPlainText().length(),QTextCursor::KeepAnchor);
QTextCharFormat charFormat = cursor.charFormat();
charFormat.setBackground(edit->palette().base());
cursor.setCharFormat(charFormat);
После этого, при изменении поискового запроса старые выделения текста удаляются, но появилась новая проблема: почему-то сбрасываются шрифты в тексте. Если эту странную операцию не делать, то шрифты не сбрасываются.
Может, это просто баги в Qt, не знаю. Версия Qt4.8.6. К сожалению проект большой мне достался, переводить его на другую версию Qt что-то не хочется.
Записан
Ilya_181
Новичок

Offline Offline

Сообщений: 16


Просмотр профиля
« Ответ #1 : Август 12, 2017, 12:34 »

QTextCursor cursor = edit->textCursor();

// выделили текст и установили выделение желтым
cursor.select(QTextCursor::Document);
edit->setStyleSheet("selection-background-color: yellow");

// в какой-то функции вернули обратно синий цвет выделения
edit->setStyleSheet("selection-background-color: blue");
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

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