2012-04-20 56 views
10

QTextEditの行間隔を設定したいとします。QTextEditの行間隔を設定する

それは

QFontMetrics::lineSpacing(); 

しかし、それをどのように設定すると、その情報を取得するには問題ありませんか?

は、私はスタイルシートを試してみましたが、それはうまくいきませんでした:

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); 
     } 
    } 
} 
+0

を、良い解決策は、非常に興味深いだろう。 – qwc

答えて

4

QFontMetricsには、フォントファイルに由来する静的プロパティが含まれています。大文字の「C」はどれくらいですか。lineSpacing()は、フォントを設計した人がフォント自体にエンコードした、自然な距離を単間隔で取得します。 QTextEditの行間については

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

...それが見えます:あなたは、実際には...ここで語られているかのやや複雑な話を(そうしない)それを変更したい場合それは、テキスト「レイアウト」を指定するためのQtの拡張性モデルに該当するものの一つとして見られているように(私には):

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

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

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

+0

地獄、なぜ私はそれをつまずくことはありませんでしたか?私はすぐにそれを試みます。 :) – qwc

+0

さて、静的なテキストを描画するのは簡単です。しかし、そのレイアウトをQTextEdit内の編集可能なテキストにするのは面倒です。 – qwc

+0

不思議です。あなたのQtバージョンのデフォルトのQTextLayoutのソースから作業してみてください。おそらくそれを継承し、必要と思われるビットを上書きしますか? 4.7ではそれがありました:http://qt.gitorious.org/qt/qt/blobs/4.7/src/gui/text/qtextlayout.cpp – HostileFork

関連する問題