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