Qt 富文本处理(05):常见的富文本编辑任务【来自官档的翻译】

前言

官方文档 Rich Text Processing - Common Rich Text Editing Tasks

  在使用 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::移动模式)使用移动操作(QTextCursor::移动操作)移动光标。选择文本时,我们将选择锚点留在旧光标位置,就像用户在选择文本时按住 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设计用于显示在屏幕上读取的大型富文本文档,以与 Web 浏览器相同的方式呈现它们。因此,它不会自动将文档的内容分解为适合打印的页面大小。

  QTextDocument提供打印函数,允许使用 QPrinter 类打印文档。以下代码演示如何在 QTextEdit 中准备文档,以便使用 QPrinter 进行打印:

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

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

    document->print(&printer);

  文档是从文本编辑器获取的,然后使用 QPrintDialog 构造 QPrinter。如果用户接受打印机的配置,则使用 print() 功能对文档进行格式化和打印。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值