Как изменить текущий формат строки в QTextEdit без выделения? - PullRequest
3 голосов
/ 25 марта 2011

есть!Я хочу узнать, как изменить текущий формат строки в QTextEdit?

В документе, который я прочитал,

"Форматирование можно применить к текущему текстовому документу с помощью setCharFormat ()Функции mergeCharFormat (), setBlockFormat () и mergeBlockFormat (). Если у курсора нет выбора, текущий формат блока будет изменен. "

Но в моем приложении текущий блок, в котором находится курсор,не может быть измененоМогу я что-то пропустить?Тогда как я могу изменить текущий формат блока, который не имеет выделения?

Вот мой код:

QTextCursor cursor = this->textCursor();
QTextBlockFormat blockFmt;
blockFmt.setNonBreakableLines(true);
blockFmt.setPageBreakPolicy(QTextFormat::PageBreak_AlwaysBefore);
QTextCharFormat charFmt;
charFmt.setFont(data->visualFont());
if(!cursor.hasSelection()) {
    cursor.beginEditBlock();
    cursor.setBlockFormat(blockFmt);
    cursor.mergeBlockCharFormat(charFmt);
    QTextBlock block = cursor.block();
    block.setUserData(data);
    cursor.endEditBlock();
}

Что я хочу сделать: изменить формат текущей строки, если выбора нет.Так что если cursor.hasSelection () имеет значение false, я просто объединяю новый формат для блокировки символов.Но это не работает.

Я также попытался добавить setTextCorsor (курсор);после cursor.endEditBlock ();, но все равно не работает.Фактически, после добавления этого, весь блок становится невидимым.

Так как я могу изменить текущий формат блока, который не имеет выбора?

1 Ответ

5 голосов
/ 25 марта 2011

Пожалуйста, проверьте, будет ли работать приведенный ниже пример, он должен изменить текущий формат текстового блока и шрифт.

QTextCursor cursor(myTextEdit->textCursor());

// change block format (will set the yellow background)
QTextBlockFormat blockFormat = cursor.blockFormat();
blockFormat.setBackground(QColor("yellow"));
blockFormat.setNonBreakableLines(true);
blockFormat.setPageBreakPolicy(QTextFormat::PageBreak_AlwaysBefore);
cursor.setBlockFormat(blockFormat);

// change font for current block's fragments
for (QTextBlock::iterator it = cursor.block().begin(); !(it.atEnd()); ++it)
{
    QTextCharFormat charFormat = it.fragment().charFormat();
    charFormat.setFont(QFont("Times", 15, QFont::Bold));

    QTextCursor tempCursor = cursor;
    tempCursor.setPosition(it.fragment().position());
    tempCursor.setPosition(it.fragment().position() + it.fragment().length(), QTextCursor::KeepAnchor);
    tempCursor.setCharFormat(charFormat);
}

надеюсь, это поможет, с уважением

...