Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: AlekseyK от Декабрь 29, 2010, 14:41



Название: [РЕШЕНО] Как корректно выделить (подсветить) блок текста?
Отправлено: 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 и всё оставшееся пустое пространство соответственно. Как выделить корректно: от начала первой строки (от первого символа) блока до его конца?


Название: Re: Как корректно выделить (подсветить) блок текста?
Отправлено: noirhor от Декабрь 29, 2010, 20:19
Код:
cursor.movePosition(QTextCursor::StartOfBlock);
cursor.movePosition(QTextCursor::EndOfBlock, QTextCursor::KeepAnchor);
вместо
Код:
cursor.select(QTextCursor::BlockUnderCursor);


Название: Re: Как корректно выделить (подсветить) блок текста?
Отправлено: AlekseyK от Декабрь 30, 2010, 01:05
Благодарю, работает!!! :)

P.S. Теперь правда QTextFormat::FullWidthSelection не работает: если блок занимает, например, 2 строки, то первая целиком подсвечивается, а вторая до конца строки, а не вся линия целиком.


Название: Re: Как корректно выделить (подсветить) блок текста?
Отправлено: AlekseyK от Декабрь 30, 2010, 01:23
Вот этот вариант прекрасно работает:
Код
C++ (Qt)
       cursor.movePosition(QTextCursor::StartOfBlock);
       cursor.movePosition(QTextCursor::NextBlock, QTextCursor::KeepAnchor);
Вопрос закрыт! :)