一般的なリッチテキスト編集タスク

Qt を使ってテキスト・ドキュメントを編集・処理する際に、開発者がよく行うタスクがいくつかあります。QTextBrowserQTextEdit などの表示ウィジェットの使用、QTextDocument を使ったドキュメントの作成、QTextCursor を使った編集、ドキュメント構造のエクスポートなどです。このドキュメントでは、リッチテキストクラスを使用してこれらのタスクを実行する一般的な方法をいくつか概説し、独自のアプリケーションで再利用できる便利なパターンを示します。

QTextEdit の使用

テキストエディタ・ウィジェットは、以下の方法で構築し、HTMLを表示するために使用することができます:

QTextEdit *editor = new QTextEdit(parent);
editor->setHtml(aStringContainingHTMLtext);
editor->show();

デフォルトでは、テキストエディタにはルート・フレームを持つドキュメントが含まれ、その中に空のテキスト・ブロックがあります。このドキュメントは、アプリケーションによって直接変更できるように取得できます:

QTextDocument *document = editor->document();

テキストエディタのカーソルを使って文書を編集することもできます:

QTextCursor cursor = editor->textCursor();

一度にたくさんのカーソルを使って文書を編集することができますが、QTextEdit は一度に一つのカーソルしか表示しません。したがって、特定のカーソルやその選択範囲を表示するようにエディタを更新したい場合は、文書を変更した後でエディタのカーソルを設定する必要があります:

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 は、画面上で読む大きなリッチテキスト文書の表示用に設計されており、ウェブブラウザと同じ方法でレンダリングします。そのため、文書の内容を印刷に適したページサイズに自動的に分割することはありません。

QTextDocument は、 クラスを使ってドキュメントを印刷できるように、 () 関数を提供しています。次のコードは、 の文書を、 で印刷できるようにする方法を示しています:QPrinter print 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() 関数を使って文書がフォーマットされ、印刷されます。

本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。