通用富文本编辑任务

在 使用 Qt 编辑和处理文本文档时,开发者通常会执行一些任务。这包括使用显示小部件,如 QTextBrowserQTextEdit 、使用 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类打印文档。以下代码演示了如何使用QPrinterQTextEdit中准备文档以进行打印

    QTextDocument *document = editor->document();
    QPrinter printer;

    QPrintDialog *dlg = new QPrintDialog(&printer, this);
    if (dlg->exec() != QDialog::Accepted)
        return;

    document->print(&printer);

文档从文本编辑器中获取,然后构建一个QPrinter并使用QPrintDialog进行配置。如果用户接受打印机配置,则使用print()函数对文档进行格式化和打印。

© 2024 Qt公司。本文档中的文档贡献是各自所有者的版权。本提供的文档是根据自由软件基金会发布并由其发布的GNU自由文档许可版1.3的条款许可的。Qt及其相关品牌是芬兰和/或其他国家/地区的Qt公司的商标。所有其他商标均为各自所有者的财产。