Я хотел увеличить расстояние между абзацами (текстовыми блоками) в 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.
Не использовать 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.
Других решений пока нет …