QPlainTextEdit игнорирует большинство форматов текстовых блоков - PullRequest
0 голосов
/ 15 ноября 2018

Я хотел увеличить интервал между абзацами (текстовыми блоками) в 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 Ответ

0 голосов
/ 16 ноября 2018

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

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

К вашему сведению , это также упоминалось в сообщении об ошибке , на которое вы ссылались. Может быть, вы пропустили это или забыли упомянуть об этом в своем вопросе?

Замена 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).

? Oh no!!!

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

? Yay!!!

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

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

...