精华内容
下载资源
问答
  • qt富文本
    2022-02-16 16:06:43

    介绍

    富文本其实就是在一个编辑框内又输入文字又输入图片等各种东西,不仅仅是文字,qt自带的有QTextEdit,该类中有一个QTextDocument,一切就从这里开始。

    主要搞明白以下几个类:
    QTextDocument
    QTextFrame
    QTextBlock
    QTextCursor
    QTextTableFormat
    QTextImageFormat
    QTextListFormat

    插入

    子框架

    QTextFrameFormat frameFormat;
    ui->textEdit->textCursor().insertFrame(frameFormat);
    

    图片

    QTextImageFormat imageFormat;
    imageFormat.setWidth(50);
    imageFormat.setHeight(50);
    imageFormat.setName("C:/头像.jpeg");
    ui->textEdit->textCursor().insertImage(imageFormat);
    

    表格(3x3)

    QTextTableFormat tableFormat;
    ui->textEdit->textCursor().insertTable(3, 3, tableFormat);
    

    列表

    QTextListFormat listFormat;
    ui->textEdit->textCursor().insertList(listFormat);
    

    遍历指定框架

    for(QTextFrame::iterator it = frame->begin(); it != frame->end(); it++)
    {
        //获取框架
        QTextFrame* textFrame = it.currentFrame();
        if(textFrame)
        {
            qDebug() << "textFrame";
            continue;
        }
    
        //获取文本块
        QTextBlock textBlock = it.currentBlock();
        if(textBlock.isValid())
        {
            qDebug() << textBlock.text();
        }
    }
    

    遍历指定框架中所有文本块(包括子框架)

    for(QTextBlock block = ui->textEdit->document()->firstBlock(); block.isValid(); block = block.next())
    {
        qDebug() << QString("第%1个 内容: %2 大小: %3").arg(block.firstLineNumber()).arg(block.text()).arg(block.length());
    }
    
    更多相关内容
  • 若该文为原创文章,未经允许不得转载 ...各位读者,知识无穷而人力有穷,要么改需求,要么找专业人士,要么自己研究 目录 前话 文本光标接口 概述 基于光标的编辑 ...文本文本片段 文本块:QTextBlock
  • 【QT】QT富文本

    2022-02-03 12:23:27
    富文本 QTextEdit支持富文本处理,即文档中可使用多种格式,如文字、图片、表格等。 PlainText为纯文本。 由此可类比, windows的记事本就是纯文本编辑器,word就是富文本编辑器。 文档的光标主要基于QTextCursor类...

    富文本

    QTextEdit支持富文本处理,即文档中可使用多种格式,如文字、图片、表格等。

    PlainText为纯文本。

    由此可类比, windows的记事本就是纯文本编辑器,word就是富文本编辑器。

    文档的光标主要基于QTextCursor类,文档的框架主要基于QTextDocument类。

    一个富文本的文档结构主要分为几种元素:框架(QTextFrameFormat)、文本块(QTextBlock)、表格(QTextTable)、列表(QTxtList)。

    每种元素的格式有相应的format类表示:框架格式(QTextDFrameFormat)、文本块格式(QTextBlockFormat)、表格格式(QText)、列表格式(QTextListFormat)。这些格式通常配合QTextCursor类使用。

    QTextEdit类就是一个富文本编辑器,在构建QTextEdit类对象时就已经构建了一个QTextDocument类对象和一个QTextCursor类对象。只需调用他们相应的操作即可。

    image-20220129211052245

    文档边框格式

    示例:

    image-20220129211226050

       ui->setupUi(this);
        //获取文档对象
       QTextDocument* document = ui->textEdit->document();
       //获取根 框架
       QTextFrame *rootFrame = document->rootFrame();
       //文档格式框架
       QTextFrameFormat format;
       format.setBorderBrush(Qt::red);//边框颜色
       format.setBorder(3);//边界宽度
       //设置文档框架格式
        rootFrame->setFrameFormat(format);
        //设置文本边框风格
        QTextFrameFormat frameFormat;
        frameFormat.setBackground(Qt::lightGray);
        frameFormat.setMargin(10);//设置边距
        frameFormat.setPadding(5);//设置填衬
        frameFormat.setBorder(2);
        frameFormat.setBorderStyle(QTextFrameFormat::BorderStyle_DotDash  );
        QTextCursor cursor = ui->textEdit->textCursor();
        cursor.insertFrame(frameFormat);
    

    文本个格式、文本块格式、字符格式

    image-20220130182600946

    	//添加工具栏行选项
    
        QAction* action_textFrame = new QAction("框架",this);
        connect(action_textFrame,&QAction::triggered,this,&MainWindow::showTextFrame);
        ui->mainToolBar->addAction(action_textFrame);
    
        QAction* action_textBlock = new QAction("文本块",this);
        connect(action_textBlock,&QAction::triggered,this,&MainWindow::showTextBlock);
        ui->mainToolBar->addAction(action_textBlock);//添加到工具栏中
    
        QAction* action_textFont = new QAction("字体",this);
        action_textFont->setCheckable(true);
        connect(action_textFont,&QAction::triggered,this,&MainWindow::setTextFont);
        ui->mainToolBar->addAction(action_textFont);
    
    void MainWindow::showTextFrame()
    {
        QTextDocument* document  = ui->textEdit->document();//获取文档对象
        QTextFrame* frame = document->rootFrame();//获取根框架
        QTextFrame::iterator it;
        for(it = frame->begin();!(it.atEnd());it++)
        {
            QTextFrame*childFrame  = it.currentFrame();//获取当前框架指针
            QTextBlock childBlock = it.currentBlock();//获取当前文本块
            if(childFrame)
            {
                qDebug()<<"frame";
            }
            else if(childBlock.isValid())
            {
                qDebug()<<"block:"<<childBlock.text();
            }
        }
    
    }
    
    void MainWindow::showTextBlock()
    {
        QTextDocument* document =   ui->textEdit->document();
        QTextBlock block = document->firstBlock();
        //document->blockCount()返回文本块个数
        for(int i =0 ; i < document->blockCount();i++)
        {
            qDebug()<<QString("文本块%1,文本块首行行号为:%2,长度:%3,内容%4").arg(i).arg(block.firstLineNumber()).arg(block.length()).arg(block.text());
            block = block.next();
        }
    
    }
    
    void MainWindow::setTextFont(bool checked)
    {
        if(checked)
        {
            QTextCursor cursor = ui->textEdit->textCursor();
            //文本块格式
            QTextBlockFormat blockFormat;
            //居中对齐
            blockFormat.setAlignment(Qt::AlignCenter);
            cursor.insertBlock(blockFormat);
            //字符格式
            QTextCharFormat charFormat;
            //设置背景色
            charFormat.setBackground(Qt::lightGray);
            //设置字符前景色(字符颜色)
            charFormat.setForeground(Qt::blue);
             //字体
            charFormat.setFont(QFont(QString("宋体"),12,QFont::Bold,true));
            //下划线
            charFormat.setFontUnderline(true);
            //设置字符格式
            cursor.setCharFormat(charFormat);
            cursor.insertText("嘻嘻");
        }
    }
    

    文档插入表格、列表、图片

    void MainWindow::insertTable()
    {
        QTextCursor cursor =  ui->textEdit->textCursor();
        QTextTableFormat format;//表格格式
        format.setCellSpacing(2);//表格外边空白
        format.setCellPadding(10);//表格内边空白
        cursor.insertTable(3, 3,format);
    }
    
    void MainWindow::insertList()
    {
        QTextListFormat format;//列表格式
        format.setStyle(QTextListFormat::ListDecimal);//数字编号
        ui->textEdit->textCursor().insertList(format);
    }
    
    void MainWindow::insertImage()
    {
         QString filePath  = QFileDialog::getOpenFileName(this,"选择图片",".","JPEG(*.jpg *.jpeg);;""GIF(*.gif);;""PNG(*.png)");
    
        QUrl url(QString("file://%1").arg(filePath));
    
        QImage image = QImageReader(filePath).read();
        QTextDocument* document = ui->textEdit->document();
        //文档添加图片资源
        document->addResource(QTextDocument::ImageResource,url,QVariant(image));
        QTextCursor cursor =ui->textEdit->textCursor();
        QTextImageFormat imgFormat;
        imgFormat.setWidth(image.width());
        imgFormat.setHeight(image.height());
        imgFormat.setName(url.toString());
        cursor.insertImage(imgFormat);
    }
    

    语法高亮

    image-20220202233158144

    void MySyntaxHighlighter::highlightBlock(const QString &text)
    {
        QTextCharFormat format;//字符格式
        format.setFontWeight(QFont::Bold);
        format.setBackground(Qt::red);
        format.setForeground(Qt::green) ;
        QString pattern = "\\bgood\\b";//匹配单词边界
        QRegExp expression(pattern);
        int index = text.indexOf(expression);
       while(index >= 0 )
        {
            int length = expression.matchedLength();//匹配到的字符长度
            setFormat(index,length,format);
            index = text.indexOf(expression,index + length);
       }
    }
    

    字符查找

    image-20220203120216663

    ```
        QAction* action_textFind = new QAction("查找",this);
        connect(action_textFind,&QAction::triggered,this,&MainWindow::textFind);
        ui->mainToolBar->addAction(action_textFind);
        m_findDialg = new QDialog(this);//查找对话框
        m_lineEdit = new QLineEdit(m_findDialg);//查找输入框
        QPushButton* btn = new QPushButton(m_findDialg);
        btn->setText("查找下一个");
        connect(btn,&QPushButton::clicked,this,&MainWindow::textNext);
        QVBoxLayout* layout = new QVBoxLayout;
        layout->addWidget(m_lineEdit);
        layout->addWidget(btn);
        m_findDialg->setLayout(layout);
    ```
    void MainWindow::textFind()
    {
        m_findDialg->show();
    }
    void MainWindow::textNext()
    {
        QString strFind =  m_lineEdit->text();
        bool isFind = ui->textEdit->find(strFind,QTextDocument::FindBackward);
        if(isFind)
        {
            qDebug()<<QString("行号:%1,列号:%2")
                      .arg(ui->textEdit->textCursor().blockNumber())
                      .arg(ui->textEdit->textCursor().columnNumber());
        }
    }
    
    展开全文
  • 中文富文本编辑器源码根据QT官方小示例修改而来,由原来的的英文汉化并美化,需要的可以下载试试。绿色源码,可进行二次开发。
  • 若该文为原创文章,未经允许不得转载 原博主博客地址:...本文章博客地址: 各位读者,知识无穷而人力有穷,要么改需求,要么找专业人士,要么自己研究 目录 前话 富文本处理 概述 富文本文档结构 ...

    若该文为原创文章,未经允许不得转载
    原博主博客地址:https://blog.csdn.net/qq21497936
    原博主博客导航:https://blog.csdn.net/qq21497936/article/details/102478062
    本文章博客地址:https://blog.csdn.net/qq21497936/article/details/105594953
    各位读者,知识无穷而人力有穷,要么改需求,要么找专业人士,要么自己研究

    红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中...(点击传送门)

    Qt开发专栏:开发技术(点击传送门)

    Qt开发技术:Qt富文本(一)富文本介绍、文档结构

    Qt开发技术:Qt富文本(二)Qt文本光标操作、文档布局、富文本编辑、处理和Demo

    Qt开发技术:Qt富文本(三)Qt支持的HTML子集(查询手册)以及涉及的类

     

    前话

          红胖子,来也!

          Qt的富文本技术介绍,富文本的文档结构。

     

    富文本处理

    概述

    Scribe框架提供了一组用于读取和操作结构化富文本文档的类。与Qt中以前的富文本支持不同,新类以QTextDocument类为中心,而不是以原始文本信息为中心。这使开发人员能够创建和修改结构化富文本文档,而无需准备中间标记格式的内容。

    文档中的信息可以通过两个相互补充的接口访问:

    • 基于光标的接口用于编辑:可以使用模拟用户与编辑器交互的操作编辑文本,而不会丢失文档的底层结构。
    • 只读层次接口提供文档结构的高级描述:在执行搜索和文档导出等操作时,只读分层界面最有用。

    富文本文档结构

    概述了QTextDocument中的各种元素,并描述了它们在文档结构中的排列方式。

    文本光标接口

    QTextCursor接口解释了如何使用基于光标(光标)的接口编辑富文本文档。

    文档布局

    简要说明文档布局的作用。

    常见的富文本编辑任务

    检查一些涉及阅读或操作富文本文档的常见任务。

    高级富文本

    高级富文本处理检查高级富文本编辑任务。

    支持的HTML子集

    列出QTextDocument支持的HTML标记。

     

    富文本文档结构

    概述

    文本文档由QTextDocument类表示,该类包含有关文档的内部表示、其结构的信息,并跟踪修改以提供撤消/重做功能。

    文本文档的结构化表示将其内容表示为文本块、框架、表和其他对象的层次结构。它们为文档提供了逻辑结构,并描述了它们的内容将如何显示。通常,框架和表用于将其他结构分组,而文本块包含实际的文本信息。

    使用QTextCursor或使用编辑器小部件(如QTextEdit)以编程方式创建新元素并将其插入到文档中。创建元素时,可以为其指定特定格式;否则,它们将采用元素的光标当前格式。

    基本结构

    文档的“顶层”可能按所示的方式填充。每个文档总是包含一个根框架,并且它总是至少包含一个文本块。

    对于具有某些文本内容的文档,根框架通常包含一系列块和其他元素

    即使文本块不包含任何信息,文档中的框架和表序列始终由文本块分隔。这样可以确保新元素始终可以插入现有结构之间。

    富文本文档

    QTextDocument对象包含构造富文本文档所需的所有信息。文本文档可以通过两种互补的方式访问:作为编辑器使用的线性缓冲区,以及作为对布局引擎有用的对象层次结构。在分层文档模型中,对象通常对应于可视元素,如框架、表和列表。在较低的级别上,这些元素描述文本样式和对齐方式等属性。文档的线性表示用于编辑和操作文档内容。

    尽管QTextEdit使显示和编辑富文本变得容易,但文档也可以独立于任何编辑器小部件使用,例如:

    QTextDocument *pTextDocument = new QTextDocument;

    或者,可以从现有编辑器中提取它们:

    QTextEdit *pTextEdit = new QTextEdit;
    QTextDocument *pTextDocument = pTextEdit->document();

    这种灵活性使应用程序能够处理多个富文本文档,而无需多个编辑器小部件的开销,或要求文档以某种中间格式存储。

    空文档包含根框架,根框架本身包含单个空文本块。框架提供了文档各部分之间的逻辑分隔,但也具有确定它们在呈现时的显示方式的属性。表格是一种特殊的框架类型,它由多个单元格组成,按行和列排列,每个单元格都可以包含进一步的结构和文本。表提供了管理和布局功能,允许创建灵活的单元格配置。

    文本块包含文本片段,每个片段指定文本和字符格式信息。文本属性是在字符级和块级定义的。在字符级别,可以指定字体系列、文本颜色和字体粗细等属性。块级特性控制文本的高级外观和行为,例如文本流的方向、对齐方式和背景颜色。

    文档结构不是直接操作的。通过基于光标的界面执行编辑。文本光标界面自动将新的文档元素插入到根框架中,并确保在必要时用空块填充。

    通过以下方式获得根框架:

    QTextDocument *textDocument;
    QTextFrame *root = textDocument->rootFrame();
    

    在导航文档结构时,从根框架开始很有用,因为它提供了对整个文档结构的访问。

    文档元素

    富文本文档通常由常见元素组成,如段落、框架、表和列表。这些在QTextDocument中由QTextBlock、QTextFrame、QTextTable和QTextList类表示。与文档中的其他元素不同,图像由特殊格式的文本片段表示。这使它们能够与周围的文本以内联格式放置。

    文档中的基本构造块是QTextBlock和QTextFrame。块本身包含富文本片段(QTextFragment),但这些片段不会直接影响文档的高级结构。

    可以将其他文档元素组合在一起的元素通常是QTextObject的子类,分为两类:

    • 将文本块组合在一起的元素是QTextBlockGroup的子类;
    • 将框架和其他元素组合在一起的元素是QTextFrame的子类。

    文本块:QTextBlock

          文本块由QTextBlock类提供。

    文本块将不同字符格式的文本片段组合在一起,用于表示文档中的段落。每个块通常包含许多具有不同样式的文本片段。在将文本插入文档时创建片段,而在编辑文档时添加更多片段。

    文档将拆分、合并和移除片段,以便有效地表示块中不同样式的文本。

    通过使用QTextBlock::iterator迭代器遍历块的内部结构,可以检查给定块中的片段:

    QTextBlock::iterator it;
    for (it = currentBlock.begin(); !(it.atEnd()); ++it) 
    {
        QTextFragment currentFragment = it.fragment();
        if (currentFragment.isValid()) 
        {
            processFragment(currentFragment);  // processFragment处理片段
        }
    }
    

    文本块还用于表示列表项。因此,块可以定义自己的字符格式,其中包含有关块级描述的信息,例如用于列表项的项目符号类型。

    文本块本身的格式由QTextBlockFormat类描述,并描述文本对齐、缩进和背景色等属性。

    尽管给定的文档可能包含复杂的结构,但一旦我们引用了文档中的有效块,我们就可以按照它们的写入顺序在每个文本块之间导航:

    QTextBlock currentBlock = textDocument->begin();
    while (currentBlock.isValid())
    {
        processBlock(currentBlock);  // processBlock处理块
        currentBlock = currentBlock.next();
    }
    

    当只想从文档中提取富文本时,此方法非常有用,因为它忽略框架、表和其他类型的结构。

    QTextBlock提供比较运算符,使操作块更容易:operator==()operator!=()用于测试两个块是否相同,而运算符operator<()用于确定文档中哪个块最先出现。

    文本框架:QTextFrame

    文本框架由QTextFrame类提供。

    文本框架将文本块和子框架组合在一起,创建大于段落的文档结构。框架的格式指定如何在页面上呈现和定位它。框架要么插入到文本流中,要么浮在页面的左侧或右侧。每个文档都包含一个根框架,其中包含所有其他文档元素。因此,除了根文本框架之外的所有文本框架都有父文本框架。

    由于文本块用于分隔其他文档元素,因此每个框架将始终至少包含一个文本块和零个或多个子框架。我们可以使用QTextFrame::iterator遍历文本框架的子元素来检查文本框架的内容:

    QDomElement frameElement = ...
    QTextFrame::iterator it;
    for (it = frame->begin(); !(it.atEnd()); ++it)
    {
        QTextFrame *childFrame = it.currentFrame();
        QTextBlock childBlock = it.currentBlock();
        if (childFrame)
        {
            processFrame(frameElement, childFrame);
        }else if (childBlock.isValid())
        {
            processBlock(frameElement, childBlock); 
        }
    }
    

    注意迭代器同时选择文本框架和块,所以有必要检查它引用的是哪个。这允许逐文本框架导航文档结构,但如果需要,仍然可以访问文本块。QTextBlock::iterator和QTextFrame::iterator类都可以互补地用于从文档中提取所需的结构。

    表格:QTextTable

    表由QTextTable类提供。

    表是按行和列排列的单元格集合。每个表单元格都是具有自己字符格式的文档元素,但也可以包含其他元素,如框架和文本块。在构造表或添加额外的行或列时,将自动创建表单元格。它们也可以在桌子之间移动。

    QTextTable是QTextFrame的一个子类,因此在文档结构中将表视为框架。对于我们在文档中遇到的每个文本框架,我们可以测试它是否表示一个表,并以不同的方式处理它:

    QDomElement frameElement = ...
    QTextFrame::iterator it;
    for (it = frame->begin(); !(it.atEnd()); ++it)
    {
        QTextFrame *childFrame = it.currentFrame();
        QTextBlock childBlock = it.currentBlock();
    if (childFrame) 
        {
            QTextTable *childTable = qobject_cast<QTextTable*>(childFrame);
            if (childTable)
            {
                processTable(frameElement, childTable);
            }
            else
            {
                processFrame(frameElement, childFrame);
            }
         } else if (childBlock.isValid())
         {
            processBlock(frameElement, childBlock);
         }
    }
    

    列表:QTextList

    列表由QTextList类提供。

    列表是按常规方式格式化的文本块序列,但也提供了标准的列表修饰,如项目符号和枚举项。列表可以嵌套,如果列表的格式指定了非零缩进,则列表将缩进。

    们可以通过列表中的索引引用每个列表项:

    for (int index = 0; index < list->count(); ++index)
    {
        QTextBlock listItem = list->item(index);
        processListItem(listItem);
    }
    

    由于QTextList是QTextBlockGroup的一个子类,因此它不将列表项分组为子元素,而是提供各种功能来管理它们。这意味着我们在遍历文档时发现的任何文本块实际上都可能是一个列表项。我们可以使用以下代码确保正确识别列表项:

    QTextFrame::iterator it;
    for (it = frame->begin(); !(it.atEnd()); ++it)
    {
        QTextBlock block = it.currentBlock();
        if (block.isValid())
        {
            QTextList *list = block.textList();
            if (list)
            {
                int index = list->itemNumber(block);
                processListItem(list, index);
            }
        }
    }
    

    图像:QTextFragment

    QTextDocument中的图像由文本片段表示,文本片段通过资源机制引用外部图像。图像是使用光标界面创建的,以后可以通过更改图像文本片段的字符格式进行修改:

    if (fragment.isValid()) 
    {
        QTextImageFormat newImageFormat = fragment.charFormat().toImageFormat();
        if (newImageFormat.isValid())
        {
            newImageFormat.setName(":/images/newimage.png");
            QTextCursor helper = cursor;
            helper.setPosition(fragment.position());
            helper.setPosition(fragment.position() + fragment.length(),
                            QTextCursor::KeepAnchor);
            helper.setCharFormat(newImageFormat);
        }
    }
    

    通过遍历包含图像的文本块中的片段,可以找到表示图像的片段。

     

    原博主博客地址:https://blog.csdn.net/qq21497936
    原博主博客导航:https://blog.csdn.net/qq21497936/article/details/102478062
    本文章博客地址:https://blog.csdn.net/qq21497936/article/details/105594953

    展开全文
  • 转载请以连接形式标明本文标题和地址:本文标题:Qt富文本编辑器QTextDocument本文地址:https://www.techieliang.com/2017/12/726/1. 介绍对于文本编辑,qt提供了不少控件htmlQLineEdit:单行文本输入,好比用户名...

    版权声明:若无来源注明,

    Techie亮博客文章均为原创。 转载请以连接形式标明本文标题和地址:

    本文标题:Qt富文本编辑器QTextDocument     本文地址:

    https://www.techieliang.com/2017/12/726/

    1. 介绍

    对于文本编辑,qt提供了不少控件html

    QLineEdit:单行文本输入,好比用户名密码等简单的较短的或者具备单一特征的字符串内容输入。使用text、settext读写

    QTextEdit:富文本编辑器,支持html显示,能够用sethtml/tohtml进行html文本操做或使用,也可利用setPlainText、toPlainText进行纯文本操做

    QPlainTextEdit:纯文本编辑器,使用了近似于textedit的技术并作了纯文本编辑的优化,并具备文章段落的概念也提供了撤销等功能,但不支持html显示。

    QTextBrowser:继承于QTextEdit,仅提供显示功能,并提供了超文本导航功能,若是不须要超文本链接只须要使用QTextEdit并设置QTextEdit::setReadOnly

    上述都是显示控件,能够肯定的是富文本编辑器要用QTextEdit或者QPlainTextEdit,可是确定不能主动撰写html代码或者逐个处理显示格式实现富文本,实际上Qt提供了相关类:QTextDocument富文本文档、QTextBlock文本快、QTextFrame框架、QTextTable表格、QTextList列表、QTextCursor指针位置、QTextXXXXFormat各类数据类型样式。对于富文本的全部帮助请见官方文档:Rich Text Processingwindows

    QTextEdit和QPlainTextEdit选择:差别是QTextEdit提供了tohtml,若是想在处理完文档,直接根据文档生成html做为博客等内容,可使用此类,没有须要后者便可api

    注意关系:QTextDocument>QTextFrame>QTextBlock/QTextTable/QTextList前包含后app

    查看两个类的api,均提供了document方法,能够返回QTextDocument指针,用于经过QTextDocument的方式操做文档内容格式,官方范例:框架

    Calendar Example利用富文本编辑器的方式实现日历(不建议学这个毕竟已经有现成的日历控件,并且文档中每每也不会插入日历)post

    Order Form Example根据一些的参数设置生成报表,其实和上面的原理同样优化

    2. 基本使用

    首先当具备一个edit时,不须要自行建立document,能够直接用document方法能够获取当前edit的document

    QTextDocument只是一个文档,其内还有根节点,须要使用QTextDocument::rootFlrame获取,设置根节点的边框粗细、颜色就相似于设置word文档边框底纹

    2.1. 简单范例

    #include "mainwindow.h"

    #include "ui_mainwindow.h"

    #include

    #include

    #include

    MainWindow::MainWindow(QWidget *parent):

    QMainWindow(parent),

    ui(newUi::MainWindow){

    ui->setupUi(this);

    QTextDocument* doc = ui->textEdit->document();

    QTextFrame *root_frame = doc->rootFrame();

    QTextFrameFormat root_frame_format = root_frame->frameFormat();//建立框架格式

    root_frame_format.setBorderBrush(Qt::darkBlue);//设置边界颜色

    root_frame_format.setBorder(5);//设置边界宽度

    root_frame->setFrameFormat(root_frame_format);//给框架使用格式

    QTextFrameFormat frame_format;

    frame_format.setBackground(Qt::darkRed);//设置背景色

    frame_format.setMargin(10);//设置边距

    frame_format.setPadding(5);//设置填充

    frame_format.setBorder(2);//设置边界宽度

    frame_format.setBorderStyle(

    QTextFrameFormat::BorderStyle_Solid);//设置边框样式

    frame_format.setPosition(QTextFrameFormat::FloatRight);//右侧

    frame_format.setWidth(QTextLength(

    QTextLength::PercentageLength, 40));//宽度设置

    QTextCursor cursor = ui->textEdit->textCursor();

    cursor.insertText("A company");

    cursor.insertBlock();

    cursor.insertText("321 City Street");

    cursor.insertBlock();

    cursor.insertFrame(frame_format);

    cursor.insertText("Industry Park");

    cursor.insertBlock();

    cursor.insertText("Another country");

    }

    上述代码仅显示了四行文字,前两行在root跟框架显示,后两行在一个新建的frame中显示,并将frame置于右侧限定了宽度,更多的布局方法请参考:Order Form Example

    上述并未对文本格式作设置,能够在insertText的第二个参数直接赋予一个文本格式QTextCharFormat

    2.2. QTextCursor光标操做/遍历嵌套Frame/遍历全部Block

    首先他有各类instert函数能够插入上面提到的各类文档中的数据类型。有时并不能一次准确的创建好整个文档,须要在中间插入,这样就须要setPosition命令,而positon的具体值能够经过上述各类数据类型的类获取到每一个块或者框架或者其余类型开头的positon,也能够经过length获取到当前块的长度用于定位末尾位置。下面提供一个简单范例

    #include "mainwindow.h"

    #include "ui_mainwindow.h"

    #include

    #include

    #include

    #include

    MainWindow::MainWindow(QWidget *parent):

    QMainWindow(parent),

    ui(newUi::MainWindow){

    ui->setupUi(this);

    QTextDocument* doc = ui->textEdit->document();

    QTextFrame *root_frame = doc->rootFrame();

    QTextFrameFormat root_frame_format = root_frame->frameFormat();//建立框架格式

    root_frame_format.setBorderBrush(Qt::darkBlue);//设置边界颜色

    root_frame_format.setBorder(5);//设置边界宽度

    root_frame->setFrameFormat(root_frame_format);//给框架使用格式

    QTextFrameFormat frame_format;

    frame_format.setBackground(Qt::darkRed);//设置背景色

    frame_format.setMargin(10);//设置边距

    frame_format.setPadding(5);//设置填充

    frame_format.setBorder(2);//设置边界宽度

    frame_format.setBorderStyle(

    QTextFrameFormat::BorderStyle_Solid);//设置边框样式

    frame_format.setPosition(QTextFrameFormat::FloatRight);//右侧

    frame_format.setWidth(QTextLength(

    QTextLength::PercentageLength, 40));//宽度设置

    QTextCursor cursor = ui->textEdit->textCursor();

    cursor.insertText("A company");

    cursor.insertBlock();

    cursor.insertText("321 City Street");

    cursor.insertFrame(frame_format);

    cursor.insertText("Industry Park");

    cursor.insertBlock();

    cursor.insertText("Another country");

    //遍历frame

    for(autoblock = root_frame->begin();!block.atEnd();++block){

    if(block.currentBlock().isValid()){

    qDebug()<

    }

    elseif(block.currentFrame()){//frame嵌套,范例只有两层因此不递归了

    autochild_frame = block.currentFrame();

    for(autoblock2 = child_frame->begin();!block2.atEnd();++block2){

    if(block.currentBlock().isValid()){

    qDebug()<

    }

    }

    }

    }

    //还能够经过root_frame->childFrames()直接获取所字frame

    //遍历文本块

    QTextBlock block = doc->firstBlock();

    for(inti = 0; i < doc->blockCount();i++){

    qDebug()<< QString("block num:%1\tblock first line number:%2\tblock length:%3\ttext:")

    .arg(i).arg(block.firstLineNumber()).arg(block.length())

    << block.text();

    block = block.next();

    }

    QTextBlock insert_block = doc->firstBlock().next();

    //在第二行末尾添加

    cursor.setPosition(insert_block.position()+insert_block.length()-1);

    cursor.insertText("change cursor postion and insert");

    //在第三行开头添加-也就是新frame里面最开始添加

    //方法一,第二行末尾+1就是第三行开头

    cursor.setPosition(insert_block.position()+insert_block.length());

    //方法二,position默认返回的就是一个块开头

    cursor.setPosition(insert_block.next().position());

    //方法三,利用frame,frame是在一个锚点定位,开头在第二行末尾因此必须加一

    cursor.setPosition(frame_format.position()+1);

    cursor.insertText("change cursor postion and insert");

    }

    前面的内容没有变化,后面先展现了如何遍历全部frame以及嵌套的frame。若是是全文检索或者总体修改也能够直接遍历全文全部block

    展开全文
  • Qt富文本 - 文本块

    2022-04-24 09:55:08
    文本框格式、文本块格式、字符格式
  • Qt富文本 - 语法高亮

    2022-04-27 11:24:05
    //设置加粗 format.setBackground(Qt::red); //背景设置为红色 format.setForeground(Qt::green); //前景设置为绿色 //匹配的单词 //QString pattern = "\\bgood\\b"; // "\\b" 为单词边界匹配 QString pattern = ...
  •   富文本文档的图像由通过资源机制引用外部图像的文本片段表示。层次结构关系如下: QTextImageFormat 类   QTextImageFormat类提供QTextDocument中图像的格式信息。   QTextDocument 中的图像由通过资源机制...
  • 文件拖拽和打开 新建桌面应用程序testDragFile,基类QMainWindow,勾选创建界面文件 ...Mainwindow.h添加拖拽事件声明 mainwindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow>...
  • format.setBorderBrush(Qt::red); //边框颜色设置为红色 format.setBorder(5); //边框宽度 //设置根框架格式 rootFromat->setFrameFormat(format); //添加 表格按钮到工具栏 QAction *tableAction = new QAction(...
  • 为啥最多才能收5分,这让我很无语,里面实现了很多功能,包括图片加载,上标下标之类
  •   Qt 的文本小部件能够显示使用 HTML 4 标记子集指定的富文本。使用QTextDocument 的小部件(如QLabel 和 QTextEdit)能够显示用这种方式指定的富文本。 在文本小部件中使用 HTML 标记   小部件会自动检测 HTML ...
  • Qt富文本颜色拼接

    2020-06-15 17:35:33
    QLabel* label = new QLabel(this); QString text; text.append(QObject::tr("<font style='font-size:14px' color=red>%1</font>").arg(u8"红色")); text.append(QObject::tr("<...
  •   Qt富文本处理使用了Scribe框架,提供一组用于读取和操作结构化富文本文档(RTF)的类。 与以前的Qt支持富文本不同,新类围绕QTextDocument类而不是原始文本信息。 这使开发人员无需创建中间标记格式的内容就可以...
  • //边框颜色设置为红色 format.setBackground(Qt::yellow); format.setBorder(5); //边框宽度 //设置根框架格式 rootFromat->setFrameFormat(format); //文本边框格式 QTextFrameFormat frameFormat...
  • Qt富文本

    千次阅读 2018-06-24 23:33:38
    富文本文档通常包括一些通用的元素,例如段落、框架、表格和列表。这些在 QTextDocument 类中分别使用 QTextBlock,QTextFrame,QTextTable 和 QTextList 描述。不同于文档的其他元素,图片使用一种特殊的文本片段...
  • 前言 官方文档 Rich Text Processing - Common Rich Text Editing ...本文档概述了使用富文本类执行这些任务的一些更常见方法,显示了可以在您自己的应用程序中重用的方便模式。 使用 QTextEdit   可以构造文本编辑
  • Qt生成表格的方式有很多种,包括html、Qtablewidget、Qtableview、以及本文重点要讲的富文本生成表格。在此之前我先总结一下html、html、Qtablewidget、Qtableview的优缺点。 1.1 html 在这里插入代码片 ...
  •   富文本文档的文档元素:QTextBlock类和QTextBlockFormat 类的层次结构如下图所示: QTextBlock类   QTextBlock类为QTextDocument中的文本片段提供了一个容器。   文本块将文本块或段落封装在QTextDocument...
  •   富文本文档的表格相关类:QTextTable类、QTextTableFormat类、以及 QTextTableCell 和 QTextTableCellFormat 类的层次结构如下图所示: QTextTable类   QTextTable类表示QTextDocument中的一个表格。主要功能...
  • 若该文为原创文章,未经允许不得转载 原博主博客地址:https://blog.csdn.net/qq21497936 ...各位读者,知识无穷而人力有穷,要么改需求,要么找专业人士,要么自己研究 目录 前话 ...概述 ...支持的标记 ...富文本处理相关类
  • 高级富文本处理 官方文档 Rich Text Processing - Advanced Rich Text Processing 处理大型文件   Qt 不限制用于文本处理的文件的大小。在大多数情况下,这不会出现问题。但是,对于特别大的文件,您可能会遇到...
  • QT富文本编程

    2020-12-23 00:40:48
    富文本编程-文本块 富文本编程-文档边框格式 #include <QTextFormat> #include <QTextFrame> QTextDocument *document=ui->textEdit->document(); //获取文本对象 QTextFrame*rootFrame=...
  • QTableView 标题换行显示和富文本显示 ,多种代理,可以解决一些问题,有点贵,慎下载
  • QT--富文本处理

    2022-01-18 09:27:06
    富文本处理 富文本文档结构 文本块 表格、列表与图片. 查找功能 语法高亮与HTML
  •  订单表单示例显示了如何通过将简单模板与用户在对话框中输入的数据相结合来生成富文本文档。 DetailsDialog 类定义   DetailsDialog类是QDialog的子类,实现了插槽verify( )以便以后可以验证DetailsDialog的...
  • 原创文章,欢迎转载。...演示2.1. 代码2.2. 关于打开超链接的两种方式说明3.支持的标签 Tags4....说明Qt的文本窗体部件能够显示富文本,使用HTML4 标记。能够以这种方式显示富文本的窗体控件有: QTextD...
  • Qt富文本格式

    2021-06-23 05:28:54
    /* 文本块格式 */ blockFormat.setAlignment ( Qt::AlignCenter ); /* 水平居中 */ cursor.insertBlock ( blockFormat ); /* 使用文本块格式 */ QTextCharFormat charFormat; /* 字符格式 */ charFormat.set...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,760
精华内容 1,104
关键字:

qt富文本

友情链接: DyScrollRect.zip