2016-06-15 4 views
1

チャットアプリケーションを作成しようとしています。そのため、ユーザーがコンテンツを入力するテキストボックスがあります。 TextEditボックスは、リターンを押すたびに動的にリサイズされますが、フィールドの最後に到達すると残念ながら少しだけ自動的に増加します。QTextEditはフィールド境界に達すると新しい行を作成しません。

def func(self): 
    self.msgtext = QtGui.QTextEdit(self) 
    self.msgtext.setObjectName('msgtext') 
    self.msgtext.setStyleSheet("#msgtext {background-color: black; color: yellow; font-size: 18pt; }" 
    "#msgtext:highlight {color: red; }") 
    self.msgtext.setMaximumSize(500, 32) 
    self.msgtext.textChanged.connect(self.test) 

def test(self): 
    lines = self.msgtext.document().blockCount() 
    self.msgtextplain = self.msgtext.toPlainText() 
    self.msgtext.setMaximumSize(500, 30*lines) 

そう見られるように、それだけで1行ですべての時間を増やすだろうが、それはフィールドの終わりに到達したとき、それは実際に新しい行を作成していない、ちょうどそれのサイズビットを増やすしようとします。

ので、私は、文字列の長さをカウントしようと、新しい行を挿入するために、単純なブールを使用して、しかし、それは動作しないだろうしている:私が到達し、f110回小文字を入れていた

行の末尾です。しかし、私は大文字のF44回だけ入れて、 に到達しなければなりませんでした。

フィールドをユーザーがフィールドの最後に到達するたびに自動的に新しい行を挿入するにはどうすればよいですか? QTextEditの文字列の長さをすべて同じにすることはできますか?たとえそれが大文字または小文字であっても?

答えて

0

これは、実際に改行を与えられたテキストの幅と高さを測定するだけでなく、可能なワードラッピングを与えているので、興味深い質問です。すべての制約(つまり幅)の影響を受けます

Qttext bounding rectangle (link to Qt5)を測定させるのではなく、新しい行の数などを数えないようにしてください。だから、500の最大幅とあなたはこのような何かを行うことができます制限する長方形のために十分な大きさの高さを与えられた:

font = self.msgtext.currentFont() 
metric = QFontMetric(font) 
rect = metric.boundingRect(0, 0, 500, 10000, 
          Qt.AlignTop | Qt.AlignLeft | Qt.TextWordWrap, 
          self.msgtext.toPlainText()) 

結果の高さは、これが唯一であるrect

rect.height() 

注記に記載されていますガイド、それは働くコードを提供しません。また、すぐに発生する問題を解決することはありません。

関連する問題