C++ Qt学习笔记(3)QT中的文本处理

1. 富文本和纯文本的概念:

纯文本: 例如一个txt文件打开,里面只有文本内容,除此之外什么都没有,非常单调,这既是纯文本。

富文本:   例如一个.doc的word文件,打开之后,不但有文字,还有图片,可能不同段落的文本还有不同的颜色,还有表格等内容,这就是富文本

富文本的功能比纯文本要更加强大,Qt中的QLineEdit只能处理纯文本,而QTextEdit支持富文本处理。

Qt中文档的基本框架:

Qt对富文本的处理分为编辑操作和只读操作两种方式,一个富文本文档的结构主要分为四种:

1. 框架(QtextFrame)                    QTextFrameFormat

2. 文本块 (QTextBlock)                QTextBlockFormat

3. 表格(QtextTable)                     QTextTableFormat

4. 列表 (QTextList)                           QTextListFormat

每一种元素的格式使用相应的Format类来表示,这些格式在编辑文档时使用,需要搭配QTextCusor,  QTextEdit类就是一个富文本编辑器,所以在构建QTextEdit类对象的时候就已经构建了一个QTextDocument类对象和一个QTextCursor类对象,只要调用他们进行相应的操作即可.

1. 文本块:
定义槽函数,用于读取文本块的内容

private slots:
    void on_textBlock_triggered();

在将textblock菜单连接到槽函数之后,定义槽函数如下:

void MainWindow::on_textBlock_triggered()
{
    qDebug() << "Text block" << endl;
    QTextDocument* document = ui->textEdit->document();    // 文档框架QTextDocument类

    // 获取文本块
    QTextBlock block = document->firstBlock();
    for(int i=0; i<document->blockCount(); i++)
    {
        qDebug() << tr("block:%1, block line number: %2, block length: %3, content:%4").
                    arg(i).arg(block.firstLineNumber()).arg(block.length()).arg(block.text());
        // 更新block
        block  = block.next();
    }

}

可以根据TextEdit中的内容,获取文本:

输出结果:

Qt中,tr()能够将普通字符串转化为QString类型,arg()函数能够将字符串中的参数传入字符串。

2. 表格,列表与图片

可以在QTextEdit中分别出入表格,列表,以及图片,

void MainWindow::on_textTable_triggered()
{
    ui->textEdit->clear();
    QTextCursor cursor = ui->textEdit->textCursor();     // 获取文本光标
    QTextTableFormat format;
    format.setCellSpacing(2);
    format.setCellPadding(10);
    cursor.insertTable(2, 2, format);   // 创建一个表格   row, column style
}


void MainWindow::on_textList_triggered()
{
    ui->textEdit->clear();
    QTextCursor cursor = ui->textEdit->textCursor();     // 获取文本光标
    QTextListFormat format;
    format.setStyle(QTextListFormat::ListDecimal);
    cursor.insertList(format);
}

void MainWindow::on_textImage_triggered()
{
    ui->textEdit->clear();
    QTextCursor cursor = ui->textEdit->textCursor();
    QTextImageFormat format;
    format.setName("../qt.jpg");    //指定图片路径
}

------------------------------------------------------------------------------------------------------

 

 

posted @ 2020-01-12 19:23  Alpha205  阅读(229)  评论(0编辑  收藏  举报