12

QTextEditの行間隔を設定したい。

その情報を取得することは問題ありません

QFontMetrics::lineSpacing();

しかし、それをどのように設定するのですか?

StyleSheetsで試しましたが、うまくいきませんでした。

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

また

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

部分的な解決策:

さて、私は解決策を見つけました-私が望んでいた方法ではありませんが、少なくともそれは単純であり、概念実証に十分な、ほぼ意図した動作を提供します。

すべての新しい行には、いくつかの行間隔があります。ただし、テキストが自動的に新しい行に折り返されるまで入力するだけでは、この2行の間に行間隔はありません。このハックはテキストブロックでのみ機能します。コードを参照してください。

それはブルートフォースと醜いハックであることを覚えておいてください。しかし、それはあなたの美しい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);
        }
    }
}
4

4 に答える 4

4

QFontMetrics には、(名前ごとに) フォント ファイルに由来する静的プロパティが含まれています。大文字の「C」の幅など lineSpacing()は、フォントを設計した人がフォント自体にエンコードしたシングルスペースでの自然な距離を取得します。実際にそれを変更したい場合(変更しない場合)...どのようにやや複雑な話がここで語られます:

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

QTextEdit の行間については... (私には) それは、テキストの「レイアウト」を指定するための Qt の拡張モデルに該当するものの 1 つと見なされているように見えます。

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

デフォルトを使用する代わりに、QTextDocument に独自のレイアウト クラスを提供します。誰かがここで試してみましたが、完成したコードを投稿しませんでした:

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

于 2012-04-20T17:26:35.400 に答える