在QTextEdit中设置行间距

qwc*_*qwc 11 c++ qt

我想设置QTextEdit的行间距.

获取该信息没有问题

QFontMetrics::lineSpacing();
Run Code Online (Sandbox Code Playgroud)

但是如何设定呢?

我尝试使用StyleSheets,但这不起作用:

this->setStyleSheet("QTextEdit{ height: 200%; }");
Run Code Online (Sandbox Code Playgroud)

要么

this->setStyleSheet("QTextEdit{ line-height: 200%; }");
Run Code Online (Sandbox Code Playgroud)

部分解决方案:

好吧,我找到了一个解决方案 - 不是我想要的方式,但至少它很简单,它几乎给出了我的预期行为,足以证明我的概念.

在每一个新行都有一些行间距.但是,如果您只是键入文本自动换行到新行,那么这两行之间就不会有行间距.这个hack只适用于文本块,请参阅代码.

请记住它是蛮力和丑陋的黑客.但它为你漂亮的QTextEdit提供了某种行间距.每次文字更改时都要调用它.

void setLineSpacing(int lineSpacing) {
    int lineCount = 0;
    for (QTextBlock block = this->document()->begin(); block.isValid();
            block = block.next(), ++lineCount) {
        QTextCursor tc = QTextCursor(block);
        QTextBlockFormat fmt = block.blockFormat();
        if (fmt.topMargin() != lineSpacing
                || fmt.bottomMargin() != lineSpacing) {
            fmt.setTopMargin(lineSpacing);
            //fmt.setBottomMargin(lineSpacing);
            tc.setBlockFormat(fmt);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Hos*_*ork 4

QFontMetrics 包含(根据名称)来自字体文件的静态属性。大写“C”的宽度等可以 lineSpacing()让您获得设计字体的人编码到字体本身中的单行距的自然距离。如果你真的想改变这一点(你不想)……这里讲述的故事有点复杂:

http://fontforge.sourceforge.net/faq.html#linespace

至于 QTextEdit 中的行间距......(对我来说)它看起来像是属于 Qt 指定文本“布局”的可扩展性模型的内容之一:

http://doc.qt.io/qt-4.8/richtext-layouts.html

您可以向 QTextDocument 提供您自己的布局类,而不是使用默认的布局类。有人在这里尝试过,但没有发布他们完成的代码:

http://www.qtcentre.org/threads/4198-QTextEdit-with-custom-space- Between-lines