Как сделать отступ многострочного текста за списками в QML TextEdit

В QML я использую элемент TextEdit для текстового редактора с кодом подсветки, работающим за ним (QSyntaxHighlighter). Когда пользователь вводит дефис (-), он будет распознан кодом выделения и отформатирован (например, Markdown). Но, кроме того, я хочу, чтобы текст был с отступом за тире, когда он многострочный. Точно так же, как это происходит со списками HTML.

Вот как это выглядит сейчас: Как это выглядит сейчас

Вот как я этого хочу (текст правильно выравнивается за тире): введите здесь описание изображения

Я знаю, что это может привести к отступу текста:

QTextCursor cursor(currentBlock());
QTextBlockFormat textBlockFormat = currentBlock().blockFormat();
textBlockFormat.setIndent(1);
cursor.setBlockFormat(textBlockFormat);

Идея состоит в том, чтобы по умолчанию сделать отступ для всего текста и отменить отступ для строк с помощью тире или чего-то подобного, но пока не могу понять, как этого добиться.

Любые другие идеи?


person Eduard    schedule 25.02.2016    source источник


Ответы (1)


Хорошо, по-видимому, есть также вариант оформления списка. Вот как вы можете изменить стиль блока:

QTextBlock block = textDoc->findBlockByNumber(i);
QTextCursor cursor(block);

cursor.beginEditBlock();
QTextListFormat::Style style = QTextListFormat::ListDecimal;
QTextBlockFormat blockFmt = cursor.blockFormat();
QTextListFormat listFmt;

if (cursor.currentList()) {
    listFmt = cursor.currentList()->format();
} else {
    listFmt.setIndent(blockFmt.indent() + 1);
    blockFmt.setIndent(0);
    cursor.setBlockFormat(blockFmt);
}

listFmt.setStyle(style);

cursor.createList(listFmt);
cursor.endEditBlock();

Это можно использовать в слоте, связанном с сигналом contentChange от QTextDocument, или в подсветчике.

person Eduard    schedule 03.03.2016