QTextEdit обновить одиночный QTextCharFormat

Я пытаюсь обновить QTextCharFormat для одного символа. Но это не применяется:

QTextCursor cursor(document());
cursor.setPosition(4);
QTextCharFormat format;
format.setFontPointSize(sizeString.toInt());
cursor.mergeCharFormat(format);
qDebug() << "SET POS " << cursor.position() << " TO " << sizeString.toInt();

QTextCursor cursor2(document());
cursor.setPosition(4);
QTextCharFormat charformat = cursor2.charFormat();
QFont font = charformat.font();
qDebug() << " LOADED FONTSIZE: " << font.pointSize();

Выход:

SET POS  4  TO  16
LOADED FONTSIZE:  36

Есть идеи, чего не хватает?

0

Решение

Чтобы применить изменения, вы должны выделить часть текста (как в реальном редакторе).
Вы только устанавливаете курсор в положение, фактически не выбирая вещи.

Если вы хотите выделить текст, вы должны переместить курсор в другую позицию, продолжая выделение.

cursor.setPosition(4);
cursor.setPosition(5, QTextCursor::KeepAnchor);

Это устанавливает курсор в положение 4. Затем перемещает курсор в положение 5, но сохраняя привязку выбора. Что приводит к выбору всего между позициями 4 и 5.

Теперь ваши изменения будут применены к выбору.

2

Другие решения

Пример правильного использования:

Получите курсор вашего QTextEdit

QTextEdit *editor = new QTextEdit();
QTextCursor cursor(editor->textCursor());
cursor.movePosition(QTextCursor::Start);

Настройте свой другой QTextCharFormat

QTextCharFormat plainFormat(cursor.charFormat());

QTextCharFormat headingFormat = plainFormat;
headingFormat.setFontWeight(QFont::Bold);
headingFormat.setFontPointSize(16);

QTextCharFormat emphasisFormat = plainFormat;
emphasisFormat.setFontItalic(true);

Теперь вставьте текст в текстовый редактор, используя разные форматы

cursor.insertText(tr("Character formats"),
headingFormat);

cursor.insertBlock(); // Single character
cursor.insertText(tr("a"), emphasisFormat);
cursor.insertText(tr("b"), headingFormat);
cursor.insertBlock();cursor.insertText(tr("Text can be displayed in a variety of ""different character formats. "), plainFormat);
cursor.insertText(tr("We can emphasize text by "));
cursor.insertText(tr("making it italic"), emphasisFormat);

Если вы хотите изменить стиль редактируемого виджета в режиме реального времени, просто отображая текст с разными стилями, у вас есть пример в этом URL: Пример подсветки синтаксиса

0

По вопросам рекламы [email protected]