Spec-Zone.ru › Qt

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

Существует ряд задач, которые часто выполняют разработчики при редактировании и обработке текстовых документов с помощью 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.2/richtext-common-tasks.html

Spec-Zone.ru

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