[Предыдущая: Интерфейс QTextCursor ] [Содержание] [Следующая: Расширенная обработка форматированного текста]
Общие задачи редактирования форматированного текста
Есть несколько задач, которые часто выполняются разработчиком при редактировании и обработке документов с использованием 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().
[Предыдущая: Интерфейс QTextCursor ] [Содержание] [Следующая: Расширенная обработка форматированного текста]
Copyright © 2009 Nokia Corporation and/or its subsidiary(-ies) |
Торговые марки |
Qt 4.5.3 |
|