QPlainTextEdit игнорирует большинство форматов текстовых блоков

Я хотел увеличить расстояние между абзацами (текстовыми блоками) в QPlainTextEdit, но безрезультатно. После экспериментов я обнаружил, что, хотя некоторые свойства формата (например, цвет фона) вступают в силу, другие (например, поля) игнорируются.

я нашел этот отчет об ошибке, но упоминается только QTextBlockFormat::lineHeight(), В моем случае почти все методы QTextBlockFormat::* игнорируются Минимальный пример:

#include <QtWidgets>

int main(int argc, char *argv[]) {
QApplication a(argc, argv);

QPlainTextEdit te;
te.setPlainText("block1\nblock2\nblock3");

QTextCursor cursor = te.textCursor();
cursor.select(QTextCursor::Document);
QTextBlockFormat fmt;
fmt.setBackground(QColor(Qt::yellow));
fmt.setBottomMargin(600);
fmt.setIndent(20);
fmt.setTopMargin(600);
fmt.setLeftMargin(40);
cursor.setBlockFormat(fmt);
te.show();
return a.exec();
}

Кроме fmt.setBackground(QColor(Qt::yellow))другие игнорируются. Использование Qt 5.10.

1

Решение

Не использовать QPlainTextEdit для интенсивного форматирования текста. Используй свою кузину, QTextEdit вместо.

Используя ваш код и меняя его с QPlainTextEdit в QTextEdit решил проблему.

FYI, это также упоминалось в Сообщение об ошибке Вы связаны Может быть, вы пропустили это или забыли упомянуть об этом в своем вопросе?

Замена QPlainTextEdit на QTextEdit показывает ожидаемый результат.

QTextEdit te;               //  note the change in type
te.setPlainText("block1\nblock2\nblock3");

QTextCursor cursor = te.textCursor();
cursor.select(QTextCursor::Document);
QTextBlockFormat fmt;
fmt.setBackground(QColor(Qt::yellow));
fmt.setBottomMargin(6);     //  let's not overexaggerate anything
fmt.setIndent(1);
fmt.setTopMargin(12);
fmt.setLeftMargin(1);
cursor.setBlockFormat(fmt);

Вот результат использования QPlainTextEdit (на MacOS).

�� О нет !!!

И вот результат использования QTextEdit (на MacOS).

�� ууу !!!

Обратите внимание, что ни одну из функций-членов не нужно изменять, так что это плюс. Переход от QPlainTextEdit в QTextEdit не должно быть большой боли.

Дальнейшее чтение: Этот другой так пост вроде помогло. Также было бы хорошо прочитать, если вы планируете использовать больше текстовых классов Qt.

0

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

Других решений пока нет …

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