私がやっているのは QTreeWidget で、各アイテムのテキストは編集可能です。そこで、ウィジェット内でチェックボックス、QTextEdit/QPlainTextEdit をグループ化し、QTreeWidget の各項目に対して setItemWidget を設定します。QTextEdit の scrollBar を常にオフに設定しました。マウスの中ボタンでスクロールできるようにしたくありません。親ウィジェットにドット線を 25 ピクセル間隔で描画するためです。各テキスト行を各ドットラインの上に固定したいのですが、スクロールできません。
だから私は必要です:
1> 各テキスト行の高さが 25 ピクセルであることを確認します。各テキスト行は点線の上にあります。
2> QTextEdit のサイズを 25*LineCount の高さに変更し、QTextEdit のスクロール機能を無効にします。
テキストが変更されたら、Qt::sizeHintRole データをリセットして QTreeWidgetItem の高さを変更します。そのためには、必要な高さを正しく計算する必要があります。
すべてのテキストはプレーン テキストですが、ワードラップが有効になっています。
これが私が持っているものです:
私の設定行の高さのコード:(ui->textLbl は私の QTextEdit ウィジェット、LineHeight は 25)
QTextDocument* doc = ui->textLbl->document();
QTextCursor textCursor = ui->textLbl->textCursor();
for(QTextBlock it = doc->begin(); it != doc->end(); it = it.next())
{
QTextBlockFormat textBlockFormat = it.blockFormat();
textBlockFormat.setLineHeight(LineHeight,QTextBlockFormat::FixedHeight); //set line height
textCursor.setBlockFormat(textBlockFormat);
ui->textLbl->setTextCursor(textCursor);
}
項目 2 に対して setPlainText() で使用した文字列は次のとおりです。次のようになります。
1> 問題 #1: wordwrap 機能によって発生した行を含む正しい行数を取得できません。
2> 問題 #2: setLineHeight は、1 つの段落を含むテキスト行に対してのみ機能するようです。異なる段落の間隔を制御することはできません。
したがって、QTextEdit コントロールのすべての改行記号を手動で削除し、Enter キーを押して newLine を作り直すと、次のようになります。
それが私が望んでいることですが、テキストも setText メソッドで設定できる必要があります。
3> 問題 #3: マウスの中央ボタンでまだスクロール可能です。QTextEdit で midMouse ボタンのスクロールを使用すると、これらが行の下に余分なピクセルであることがわかります。QTextEdit はスクロール可能です。
誰かがこれら3つの問題を手伝ってくれませんか? 本当にありがとう :)