富文本之文本边框格式、文本块

      一、边框格式

 向创建的mainWIndows.h添加槽函数:

private slots:
    void showTextFrame();//遍历文本框架

showTextFrame()函数实现:

void MainWindow::showTextFrame()
{
    QTextDocument *document=ui->textEdit->document();//获取文档对象

    QTextFrame* frame=document->rootFrame();//获取文档框架

    QTextFrame::iterator it;//文本框架迭代器
    for(it=frame->begin();it!=frame->end();it++){

        //获取当前框架指针
        QTextFrame* childFrame=it.currentFrame();

        //获取当前文本块
        QTextBlock childBlock=it.currentBlock();

        if(childFrame){
            qDebug()<<"frame:";

        }else if(childBlock.isValid()){
            qDebug()<<"block:"<<childBlock.text();//打印文本块的文本

        }
    }
}

槽函数的作用就是先利用document()函数获取文本对象,在定义一个QTextFrame对象获取文本对象的根框架,紧接着利用迭代器和根框架遍历完所有的框架和文本块,再打印文本块的内容,不过我们不能获取每个框架的具体信息。 

mainWIndow的构造函数:

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    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);


    QAction* action_textFrame=new QAction("框架",this);
    connect(action_textFrame,&QAction::triggered
            ,this,&MainWindow::showTextFrame);
    action_textFrame->setCheckable(true);
    ui->mainToolBar->addAction(action_textFrame);

 }

构造函数里面先定义了一个QTextDocument对象获取QTextEdit里面的文本,在利用获取的文本对象在获取他们的根框架,紧接着设置跟框架的边框颜色为红色,并且边框的宽度设置为3.在定义一个子格式frameFormat设置子框架格式背景为亮灰,设置和根边框的距离为10个像素,设置内边距(字体离内边框的距离)为5个像素,宽度为2样式为点虚线。

定义一个QTextCursor对象获取光标文本信息,再把之前的子格式插入到光标所在处。再定义一个Action加入到工具栏中,与showTextFrame函数进行关联,在点击之后自动调用。

效果展示:

诶,有同学可能感觉到疑惑,明明我写了222222为啥没有显示,因为遍历的时候到子框架,他不能读取文本呀。

二、文本块

  向创建的mainWIndows.h添加槽函数:

void showTextBlock();//遍历文本块
    void setTextFont(bool checked);//选中进行设置文本字体

函数实现:

void MainWindow::showTextBlock()
{
    QTextDocument* document=ui->textEdit->document();
    QTextBlock block=document->firstBlock();

    for(int i=0;i<document->blockCount();i++){
        //blockCount获取文本块个数
        qDebug()<<QString("文本块%1,文本块首行行号为:%2,长度:%3,内容:%4")
                  .arg(i)
                  .arg(block.firstLineNumber())
                  .arg(block.length())
                  .arg(block.text());
    }

}

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("宋体",12,QFont::Bold,true));
        charFormat.setFontUnderline(true);//下划线
        cursor.setCharFormat(charFormat);
        cursor.insertText("啦啦啦啦");

    }

}

showTextBlock函数利用获取的文本对象document调用blcokCount获取文本块个数,再利用for循环实现遍历达到,输出每个文本块的具体信息。

blocktext()是获取文本块的信息。

setTextFont是设置文本字体格式的函数,首先判断按钮是否被选中,再定义一个鼠标对象获取选中的文本。再定义一个格式对象设置对齐方式为居中对齐,insertBlock可以插入指定的格式。再定义一个字体格式对象,设置完一系列的字体格式利用setCharFormat就在光标下就设置了文本格式。

insertText函数是在光标下插入文本。

mainwindows构造函数添加代码:

 //将按钮加入工具栏
    QAction* action_textBlcok=new QAction("文本块",this);
    connect(action_textBlcok,&QAction::triggered,
            this,&MainWindow::showTextBlock);
    ui->mainToolBar->addAction(action_textBlcok);

    QAction* action_textFont=new QAction("字体",this);
    action_textFont->setCheckable(true);
    connect(action_textFont,&QAction::triggered
            ,this,&MainWindow::setTextFont);
    ui->mainToolBar->addAction(action_textFont);

这里是定义两个Action按钮添加进主工具栏,并且与响应的槽函数建立联系。但是这里的字体按钮要设定是否勾选,因为你的槽函数有个参数Checked,所以需要设定可以勾选。

效果展示:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值