Установка интервала между строками в QTextEdit

Я хочу установить межстрочный интервал QTextEdit.

Невозможно получить эту информацию с помощью

QFontMetrics::lineSpacing();

Но как установить это?

Я попробовал с StyleSheets, но это не сработало:

this->setStyleSheet("QTextEdit{ height: 200%; }");

или

this->setStyleSheet("QTextEdit{ line-height: 200%; }");

Частичное решение:

Ну, я нашел решение - не так, как хотел, но, по крайней мере, он прост, и это дает почти мое намеренное поведение, достаточное для моего доказательства концепции.

На каждой новой строке есть несколько строк. Но если вы набираете текст до тех пор, пока текст не будет автоматически завернут на новую строку, у вас не будет межстрочного интервала между этими двумя строками. Этот хак работает только с текстовыми блоками, см. Код.

Просто имейте в виду это грубую силу и уродливый взлом. Но он обеспечивает какой-то линейный интервал для вашего красивого 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);
        }
    }
}

Ответ 1

QFontMetrics содержит (по имени) статические свойства, которые поступают из файла шрифта. Насколько широка столица "С" и т.д. 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