3

私がやっているのは 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つの問題を手伝ってくれませんか? 本当にありがとう :)

4

1 に答える 1

3

1) 使ってみて

textEdit->document()->size().height()

2) textCursor がまだドキュメントの先頭 (最初のブロック) にある場合は、

QTextCursor cursor(it); 

代わりに、その for サイクルで、指定された QTextBlock の QTextCursor を取得します。

3) スクロールバー:

textEdit->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);

textEdit->verticalScrollBar()->setMaximum(0)

(またはシグナル valueChanged/sliderMove に接続し、setValue を再度ゼロに設定)

于 2013-09-20T10:44:48.850 に答える