【QT】QT富文本
Qt 文本
2023-09-27 14:25:56 时间
富文本
QT TextEdit控件 全面详解 本文详细的介绍了TextEdit控件的各种操作,例如:获取内容、输入控件字符、保持在最后一行添加(自动滚屏)、定时关闭、添加数据换行、向鼠标位置插入一行字符、设置字体颜色属性等操作。 本系列QT全面详解文章目前共有十五篇,本系列文章较为详细的讲述了QT控件的基础操作和使用,也谢谢大家的关注、点赞、收藏。
QTextEdit支持富文本处理,即文档中可使用多种格式,如文字、图片、表格等。
PlainText为纯文本。
由此可类比, windows的记事本就是纯文本编辑器,word就是富文本编辑器。
文档的光标主要基于QTextCursor类,文档的框架主要基于QTextDocument类。
一个富文本的文档结构主要分为几种元素:框架(QTextFrameFormat)、文本块(QTextBlock)、表格(QTextTable)、列表(QTxtList)。
每种元素的格式有相应的format类表示:框架格式(QTextDFrameFormat)、文本块格式(QTextBlockFormat)、表格格式(QText)、列表格式(QTextListFormat)。这些格式通常配合QTextCursor类使用。
QTextEdit类就是一个富文本编辑器,在构建QTextEdit类对象时就已经构建了一个QTextDocument类对象和一个QTextCursor类对象。只需调用他们相应的操作即可。
示例:
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); 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); }语法高亮
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); }字符查找
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控件的基础操作和使用,也谢谢大家的关注、点赞、收藏。
相关文章
- Qt Creator开发的程序提升到管理员权限运行
- python qt
- QT信号与槽(自定义带参数的信号)
- Qt开发之Go篇(一)
- 基于QT(C++)实现查找算法图形化(数据结构课程设计)【100010640】
- Qt安卓开发经验001-010
- Qt编写安防视频监控系统48-视频参数
- Qt编写的项目作品32-定制化安装包工具(雨田哥作品)
- Qt编写安防视频监控系统33-onvif云台控制
- Qt编写地图综合应用3-省市区域图
- Qt编写自定义控件20-自定义饼图
- Qt多线程学习-用例子来理解多线程(转),这个是我看过最好的文章,总结很详细(感觉exec()的作用就是保持线程不退出,这样方便随时处理主线程发来的信号,是一种非常别致的思路)good
- Qt之加载QSS文件
- 【正点原子Linux连载】第十四章 Qt控制LED 摘自【正点原子】I.MX6U嵌入式Qt开发指南V1.0.2
- Qt如何读取.txt文件(将内容读到文本编辑框)
- Qt 按钮事件不响应