一般的なリッチテキスト編集タスク
Qt を使用してテキスト文書を編集・処理する際、開発者が頻繁に行うタスクがいくつかあります。これには、QTextBrowser やQTextEdit などの表示ウィジェットの使用、QTextDocument による文書の作成、QTextCursor を使用した編集、および文書構造のエクスポートなどが含まれます。 本ドキュメントでは、これらのタスクを実行するためのリッチテキストクラスの一般的な使用方法のいくつかを概説し、自身のアプリケーションで再利用可能な便利なパターンを紹介します。
QTextEdit の使用
テキストエディタウィジェットは、次のように構築して HTML を表示するために使用できます。
QTextEdit *editor = new QTextEdit(parent);
editor->setHtml(aStringContainingHTMLtext);
editor->show();デフォルトでは、テキストエディタにはルートフレームを持つドキュメントが含まれており、その内部には空のテキストブロックがあります。このドキュメントを取得することで、アプリケーションから直接変更を加えることができます:
QTextDocument *document = editor->document();テキストエディタのカーソルを使用してドキュメントを編集することもできます:
QTextCursor cursor = editor->textCursor();ドキュメントは複数のカーソルを使って同時に編集できますが、QTextEdit は一度に1つのカーソルしか表示しません。したがって、特定のカーソルやその選択範囲を表示するようにエディタを更新したい場合は、ドキュメントを変更した後にエディタのカーソルを設定する必要があります:
editor->setTextCursor(cursor);テキストの選択
テキストの選択は、テキストエディタでユーザーが実行する操作と同様の操作を用いてカーソルを移動させることで行います。 ドキュメント内の2点間のテキストを選択するには、まずカーソルを最初の点に配置し、その後、特別なモード(QTextCursor::MoveMode )で移動操作(QTextCursor::MoveOperation )を実行してカーソルを移動させる必要があります。テキストを選択する際、ユーザーがShiftキーを押しながらテキストを選択する場合と同様に、選択アンカーを元のカーソル位置に残します:
cursor.movePosition(QTextCursor::StartOfWord);
cursor.movePosition(QTextCursor::EndOfWord, QTextCursor::KeepAnchor);上記のコードでは、この方法を用いて単語全体が選択されています。QTextCursor には、個々の文字、単語、行、およびブロック全体を選択するための一般的な移動操作が数多く用意されています。
テキストの検索
QTextDocument は、検索のためのカーソルベースのインターフェースを提供しており、テキストエディタのようなスタイルでテキストを簡単に見つけたり変更したりできます。次のコードは、ドキュメント内の特定の単語をすべて検索し、それぞれの色を変更します:
QTextCursor newCursor(document);
while (!newCursor.isNull() && !newCursor.atEnd()) {
newCursor = document->find(searchString, newCursor);
if (!newCursor.isNull()) {
newCursor.movePosition(QTextCursor::WordRight,
QTextCursor::KeepAnchor);
newCursor.mergeCharFormat(colorFormat);
}
}なお、検索および置換操作のたびにカーソルを移動させる必要はありません。カーソルは常に、置換されたばかりの単語の末尾に位置します。
ドキュメントの印刷
QTextEdit は、画面上で閲覧される大規模なリッチテキスト文書を表示するために設計されており、Webブラウザと同様の方法でレンダリングします。その結果、文書のコンテンツを印刷に適したページ単位の区切りへ自動的に分割することはありません。
QTextDocument print() 関数を提供しており、 クラスを使用して文書を印刷することができます。以下のコードは、 内の文書を で印刷するために準備する方法を示しています:QPrinter QTextEdit QPrinter
QTextDocument *document = editor->document();
QPrinter printer;
QPrintDialog *dlg = new QPrintDialog(&printer, this);
if (dlg->exec() != QDialog::Accepted)
return;
document->print(&printer);ドキュメントはテキストエディタから取得され、QPrinter が構築された後、QPrintDialog を使用して設定されます。ユーザーがプリンタの設定を受け入れた場合、print()関数を使用してドキュメントがフォーマットされ、印刷されます。
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.