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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [РЕШЕНО] Как корректно выделить (подсветить) блок текста?  (Прочитано 3763 раз)
AlekseyK
Гость
« : Декабрь 29, 2010, 14:41 »

Пытаюсь выделить (подсветить) не линию, а блок текста (cursor.select(QTextCursor::BlockUnderCursor)) в классе, производном от QPlainTextEdit:

Код
C++ (Qt)
QList<QTextEdit::ExtraSelection> extraSelections;
 
   if (!isReadOnly()) {
       QTextEdit::ExtraSelection selection;
 
       QColor lineColor = QColor(Qt::yellow).lighter(160);
 
       selection.format.setBackground(lineColor);
       selection.format.setProperty(QTextFormat::FullWidthSelection, true);
       QTextCursor cursor(textCursor());
       cursor.select(QTextCursor::BlockUnderCursor);
       selection.cursor = cursor;
       //selection.cursor.clearSelection();
       extraSelections.append(selection);
   }
 
   setExtraSelections(extraSelections);
Но выделяется также конец предыдущего бока - т.е. перенос строки \n и всё оставшееся пустое пространство соответственно. Как выделить корректно: от начала первой строки (от первого символа) блока до его конца?
« Последнее редактирование: Декабрь 30, 2010, 01:24 от AlekseyK » Записан
noirhor
Гость
« Ответ #1 : Декабрь 29, 2010, 20:19 »

Код:
cursor.movePosition(QTextCursor::StartOfBlock);
cursor.movePosition(QTextCursor::EndOfBlock, QTextCursor::KeepAnchor);
вместо
Код:
cursor.select(QTextCursor::BlockUnderCursor);
Записан
AlekseyK
Гость
« Ответ #2 : Декабрь 30, 2010, 01:05 »

Благодарю, работает!!! Улыбающийся

P.S. Теперь правда QTextFormat::FullWidthSelection не работает: если блок занимает, например, 2 строки, то первая целиком подсвечивается, а вторая до конца строки, а не вся линия целиком.
« Последнее редактирование: Декабрь 30, 2010, 01:14 от AlekseyK » Записан
AlekseyK
Гость
« Ответ #3 : Декабрь 30, 2010, 01:23 »

Вот этот вариант прекрасно работает:
Код
C++ (Qt)
       cursor.movePosition(QTextCursor::StartOfBlock);
       cursor.movePosition(QTextCursor::NextBlock, QTextCursor::KeepAnchor);
Вопрос закрыт! Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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