Spec-Zone.ru › Qt 6.1

Общие задачи редактирования форматированного текста

Существует ряд задач, которые часто выполняют разработчики при редактировании и обработке текстовых документов с помощью 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 отображает только один курсор за раз. Поэтому, если мы хотим обновить редактор для отображения определённого курсора или его выделения, нам нужно установить курсор редактора после изменения документа:

editor->setTextCursor(cursor);

Выбор текста

Текст выбирается перемещением курсора с помощью операций, аналогичных тем, которые выполняет пользователь в текстовом редакторе. Для выбора текста между двумя точками в документе нужно установить курсор в первую точку, а затем переместить его с помощью специального режима (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 предоставляет функцию 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().

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.0/richtext-common-tasks.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API