zl程序教程

您现在的位置是:首页 >  工具

当前栏目

【QT】QT富文本

Qt 文本
2023-09-27 14:25:56 时间
富文本

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 TextEdit控件 全面详解 本文详细的介绍了TextEdit控件的各种操作,例如:获取内容、输入控件字符、保持在最后一行添加(自动滚屏)、定时关闭、添加数据换行、向鼠标位置插入一行字符、设置字体颜色属性等操作。 本系列QT全面详解文章目前共有十五篇,本系列文章较为详细的讲述了QT控件的基础操作和使用,也谢谢大家的关注、点赞、收藏。