Häufige Aufgaben bei der Rich-Text-Bearbeitung
Es gibt eine Reihe von Aufgaben, die von Entwicklern bei der Bearbeitung und Verarbeitung von Textdokumenten mit Qt häufig durchgeführt werden. Dazu gehören die Verwendung von Anzeige-Widgets wie QTextBrowser und QTextEdit, die Erstellung von Dokumenten mit QTextDocument, die Bearbeitung mit QTextCursor und der Export der Dokumentstruktur. Dieses Dokument umreißt einige der gebräuchlichsten Methoden zur Verwendung der Rich-Text-Klassen, um diese Aufgaben zu erfüllen, und zeigt praktische Muster, die in Ihren eigenen Anwendungen wiederverwendet werden können.
Verwendung von QTextEdit
Ein Texteditor-Widget kann auf die folgende Weise konstruiert und zur Anzeige von HTML verwendet werden:
QTextEdit *editor = new QTextEdit(parent); editor->setHtml(aStringContainingHTMLtext); editor->show();
Standardmäßig enthält der Texteditor ein Dokument mit einem Wurzelrahmen, in dem sich ein leerer Textblock befindet. Auf dieses Dokument kann zugegriffen werden, so dass es direkt von der Anwendung geändert werden kann:
QTextDocument *document = editor->document();
Der Cursor des Texteditors kann auch zum Bearbeiten eines Dokuments verwendet werden:
QTextCursor cursor = editor->textCursor();
Obwohl ein Dokument mit mehreren Cursorn gleichzeitig bearbeitet werden kann, zeigt QTextEdit nur einen einzigen Cursor auf einmal an. Wenn wir also den Editor aktualisieren wollen, um einen bestimmten Cursor oder seine Auswahl anzuzeigen, müssen wir den Cursor des Editors setzen, nachdem wir das Dokument geändert haben:
editor->setTextCursor(cursor);
Auswählen von Text
Die Auswahl von Text erfolgt durch Bewegen des Cursors mit Hilfe von Operationen, die denen ähneln, die ein Benutzer in einem Texteditor ausführt. Um Text zwischen zwei Punkten im Dokument zu markieren, müssen wir den Cursor an den ersten Punkt setzen und ihn dann in einem speziellen Modus (QTextCursor::MoveMode) mit einer Verschiebeoperation (QTextCursor::MoveOperation) bewegen. Wenn wir den Text markieren, lassen wir den Markierungsanker an der alten Cursorposition, so wie es der Benutzer tun könnte, wenn er die Umschalttaste beim Markieren von Text gedrückt hält:
cursor.movePosition(QTextCursor::StartOfWord); cursor.movePosition(QTextCursor::EndOfWord, QTextCursor::KeepAnchor);
Im obigen Code wird mit dieser Methode ein ganzes Wort ausgewählt. QTextCursor bietet eine Reihe von üblichen Verschiebeoperationen zur Auswahl einzelner Zeichen, Wörter, Zeilen und ganzer Blöcke.
Suchen von Text
QTextDocument bietet eine cursorbasierte Schnittstelle für die Suche, die das Auffinden und Ändern von Text im Stil eines Texteditors erleichtert. Der folgende Code findet alle Instanzen eines bestimmten Wortes in einem Dokument und ändert die Farbe jedes einzelnen:
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); } }
Beachten Sie, dass der Cursor nicht nach jeder Such- und Ersetzungsoperation verschoben werden muss; er wird immer am Ende des gerade ersetzten Wortes positioniert.
Dokumente drucken
QTextEdit ist für die Anzeige von großen Rich-Text-Dokumenten gedacht, die auf dem Bildschirm gelesen werden, indem sie auf die gleiche Weise wie ein Webbrowser gerendert werden. Daher wird der Inhalt des Dokuments nicht automatisch in seitengroße Teile zerlegt, die für den Druck geeignet sind.
QTextDocument bietet eine print()-Funktion, mit der Dokumente über die Klasse QPrinter gedruckt werden können. Der folgende Code zeigt, wie ein Dokument in einer QTextEdit für den Druck mit einer QPrinter vorbereitet wird:
QTextDocument *document = editor->document(); QPrinter printer; QPrintDialog *dlg = new QPrintDialog(&printer, this); if (dlg->exec() != QDialog::Accepted) return; document->print(&printer);
Das Dokument wird aus dem Texteditor abgerufen, ein QPrinter erstellt und dann mit QPrintDialog konfiguriert. Wenn der Benutzer die Konfiguration des Druckers akzeptiert, wird das Dokument mit der Funktion print() formatiert und gedruckt.
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.