1

我想增加 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。

4

1 回答 1

0

不要QPlainTextEdit用于文本的密集格式化。改用它的表亲QTextEdit

使用您的代码并将其更改QPlainTextEditQTextEdit解决问题。

仅供参考,您链接的错误报告中也提到了这一点。也许您错过了它或忘记在您的问题中提及它?

用 QTextEdit 替换 QPlainTextEdit 显示了预期的结果。

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应该不会很痛苦。

进一步阅读其他 SO 帖子有点帮助。如果您打算使用更多的 Qt 文本类,也可以阅读。

于 2018-11-16T15:35:13.527 回答