一、边框格式
向创建的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,所以需要设定可以勾选。
效果展示: