QTextDocument::setIndentWidth() 関数の詳細解説


QTextDocument::setIndentWidth() 関数は、テキストドキュメント内のインデント幅を設定します。これは、テキストブロックテキストリストのインデント量を決定する値です。

用途

  • 段落間の余白調整
  • コードブロックの整列
  • 文章の構造や階層を視覚的に表現

設定方法

void QTextDocument::setIndentWidth(qreal width);
  • width: 設定するインデント幅(ピクセル単位

デフォルト値

  • 40 ピクセル
  • 特定のテキストブロックのみをインデントするには、QTextBlockFormat::setIndent() 関数を使用します。
  • setIndentWidth() 関数は、ドキュメント内のすべてのテキストブロックに適用されます。
  • インデント幅は、QTextListFormatQTextBlockFormatindent プロパティによって倍数として使用されます。

QTextDocument document;

// インデント幅を 10 ピクセルに設定
document.setIndentWidth(10);

// 新しいテキストブロックを作成
QTextBlock block = document.firstBlock();

// ブロックのインデントを 2 倍のインデント幅に設定
block.setIndent(2);


#include <QTextDocument>
#include <QTextBlock>

int main() {
  // テキストドキュメントを作成
  QTextDocument document;

  // インデント幅を 15 ピクセルに設定
  document.setIndentWidth(15);

  // テキストブロックを作成
  QTextBlock block = document.firstBlock();

  // ブロックにテキストを追加
  block.text() = "これは最初のテキストブロックです。";

  // 新しいテキストブロックを作成
  block = document.lastBlock();

  // ブロックにテキストを追加
  block.text() = "これは2番目のテキストブロックです。";

  // テキストドキュメントの内容を表示
  qDebug() << document.toPlainText();

  return 0;
}

出力

これは最初のテキストブロックです。
    これは2番目のテキストブロックです。

例 2: QTextListFormat を使用してインデントを倍数に設定

#include <QTextDocument>
#include <QTextBlock>
#include <QTextListFormat>

int main() {
  // テキストドキュメントを作成
  QTextDocument document;

  // インデント幅を 10 ピクセルに設定
  document.setIndentWidth(10);

  // テキストブロックを作成
  QTextBlock block = document.firstBlock();

  // ブロックにテキストを追加
  block.text() = "これは最初のテキストブロックです。";

  // テキストリスト形式を作成
  QTextListFormat listFormat;
  listFormat.setIndent(2); // インデントを 2 倍に設定

  // ブロックにリスト形式を適用
  block.setFormat(listFormat);

  // 新しいテキストブロックを作成
  block = document.lastBlock();

  // ブロックにテキストを追加
  block.text() = "これはリスト内の項目です。";

  // テキストドキュメントの内容を表示
  qDebug() << document.toPlainText();

  return 0;
}
これは最初のテキストブロックです。
    これはリスト内の項目です。
  • フォントや行間などの他の書式設定も考慮する必要があります。
  • 実際のアプリケーションでは、ユーザー入力やファイル読み込みなどからテキストを取得する必要があります。


QTextBlockFormat::setIndent() 関数

この関数は、特定のテキストブロックのインデントを設定します。setIndentWidth() 関数と異なり、ドキュメント内のすべてのブロックに適用されるのではなく、個別に設定できます。

QTextBlock block = document.firstBlock();
block.setIndent(20); // ブロックのインデントを 20 ピクセルに設定

QTextListFormat::setIndent() 関数

この関数は、テキストリスト内のすべての項目のインデントを設定します。

QTextListFormat listFormat;
listFormat.setIndent(30); // リスト項目のインデントを 30 ピクセルに設定

// ブロックにリスト形式を適用
block.setFormat(listFormat);

スタイルシートを使用する

スタイルシートを使用して、インデントを含むすべての書式設定を定義することができます。

QTextBlock {
  margin-left: 15px; /* インデント幅を 15 ピクセルに設定 */
}

QTextCursor クラスを使用する

QTextCursor クラスを使用して、カーソル位置のインデントを設定することができます。

QTextCursor cursor(&document);
cursor.setIndent(40); // カーソル位置のインデントを 40 ピクセルに設定

それぞれの方法の利点と欠点を比較し、状況に応じて最適な方法を選択することが重要です。

方法利点欠点
QTextDocument::setIndentWidth()すべてのブロックに簡単に適用できる個別のブロックを制御できない
QTextBlockFormat::setIndent()個別のブロックを制御できるすべてのブロックに適用するにはループが必要
QTextListFormat::setIndent()リスト項目をまとめて制御できるテキストブロックには適用できない
スタイルシートすべての書式設定をまとめて定義できるコードが複雑になる可能性がある
QTextCursorカーソル位置のみを制御できる特定のブロックのみを制御するには不向き