ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Qt QPlainTextEdit多行文本编辑器

2022-08-23 13:30:55  阅读:236  来源: 互联网

标签:文本编辑 菜单 Qt int plainTextEdit QPlainTextEdit 文本 Block


QPlainTextEdit是一个多行文本编辑器,用于显示和编辑多行简单文本。另外,还有一个QTextEdit组件,是一个所见即所得的可以编辑带格式文本的组件,以HTML格式标记符定义文本格式。

实例samp4_6演示QPlainTextEdit的使用,运行界面如下图:

从上一节的代码中,我们已经知道,使用QPlainTextEdit::appendPlainText( QString )函数就可以向PlainTextEdit组件添加一行字符串。

QPlainTextEdit提供cut()、copy()、paste()、undo()、redo()、clear()、selectAll()等标准编辑功能的槽函数,QPlainTextEdit还提供了一个标准的右键快捷菜单。

逐行读取文字内容

如果要将QPlainTextEdit组件中显示的文字读出来,有一个简单的函数toPlainText()可以将全部文字内容输出为一个QString,其定义如下:

QString QPlainTextEdit :: toPlainText()

但是如果要逐行读取QPlainTextEdit组件中的字符串,则稍微麻烦一点。

下面是上图中“文本框内容添加到ComboBox”按钮的响应代码,它将plainTextEdit中的每一行作为一个Item添加到comboBox中:

 1 void Widget::on_plainTextEdit_blockCountChanged(int newBlockCount)
 2 {
 3     //plainTextEdit的内容逐行添加为comboBox的项
 4     QTextDocument * doc = ui->plainTextEdit->document();
 5     int cnt = doc->blockCount();//回车符是一个block
 6     QIcon icon("M:/images/icon/aim.ico");
 7     ui->comboBox->clear();
 8     for(int i=0;i<cnt;i++)
 9     {
10         QTextBlock textLine = doc->findBlockByNumber(i);//文本中的一行
11         QString str = textLine.text();
12         ui->comboBox->addItem(icon,str);
13     }
14 }

QPlainTextEdit的文字内容以QTextDocument类型存储,函数document()返回这个文档对象的指针。

QTextDocument是内存中的文本对象,以文本Block的方式存储,一个Block就是一个段落,每个段落以回车符结束。

QTextDocument提供一些函数实现对文本内容的读取:

  • int blockCount():获得Block个数(以回车符为间隔);
  • QTextBlock findBlockByNumber( int blockNumber ):读取一个Block,序号从0开始,直到blockCount()-1结束。

一个document有多个Block,从document中读取出的一个Block类型为QTextBlock,通过QTextBlock::text()来获取纯文本Text。

使用QPlainTextEdit自带的快捷菜单

QPlainTextEdit有自带的右键快捷菜单,可以实现常用的编辑功能。在UI设计器里,选择为plainTextEdit的customContextMenuRequested()信号生成槽函数,编写如下的代码,就可以创建并显示QPlainTextEdit的标准快捷菜单:

1 void Widget::on_plainTextEdit_customContextMenuRequested(const QPoint &pos)
2 {
3     //创建并显示标准弹出式菜单
4     QMenu* menu=ui->plainTextEdit->createStandardContextMenu();
5     menu->exec(pos);
6 }

 

标签:文本编辑,菜单,Qt,int,plainTextEdit,QPlainTextEdit,文本,Block
来源: https://www.cnblogs.com/ybqjymy/p/16615806.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有