当前位置: 首页 > news >正文

Qt应用开发(基础篇)——高级纯文本窗口 QPlainTextEdit

一、前言

        QPlainTextEdit类继承于QAbstractScrollAreaQAbstractScrollArea继承于QFrame,是Qt用来显示和编辑纯文本的窗口。

滚屏区域基类https://blog.csdn.net/u014491932/article/details/132245486?spm=1001.2014.3001.5501框架类QFramehttps://blog.csdn.net/u014491932/article/details/132188655?spm=1001.2014.3001.5501

        QPlainTextEdit是纯文本的高级查看器/编辑器,它经过优化,可以处理大型文档并快速响应用户输入。QPlainTextEdit使用与QTextEdit非常相同的技术和概念,但针对纯文本处理进行了优化。QPlainTextEdit适用于段落和字符,实际应用中显示串口监控信息、网络传输信息、文本文件读取编辑等情景下使用。

二、QPlainTextEdit类

1、backgroundVisible

        该属性表示确定调色板背景是否在文档区域之外可见。

bool backgroundVisible() const
void setBackgroundVisible(bool visible)

        如果设置为true,则纯文本编辑器将在文本文档未覆盖的视口区域上绘制调色板背景。该特性使用户可以直观地区分使用调色板的基本色绘制的文档区域未被任何文档覆盖的空白区域。 

2、blockCount        

        此属性保存文档中文本块的数量(回车换行之后算单独一块)。默认情况下,在空文档中,此属性的值为1。

int blockCount() const

3、centerOnScroll

        此属性用于确定光标是否应该在屏幕上居中。

bool centerOnScroll() const
void setCenterOnScroll(bool enabled)

        设置为true,则纯文本编辑器将垂直滚动文档,使光标在视窗中心可见,允许文本编辑滚动到文档末尾以下。下图中我们光标往下到底部的时候,继续往下屏幕会居中。

        设置为false,则纯文本编辑将滚动尽可能小的量,以确保光标可见。

4、cursorWidth

        该属性表示光标的宽度,默认宽度为1个像素。

int cursorWidth() const
void setCursorWidth(int width)

5、documentTitle

        该属性表示文档的标题,没有实际的效果。

QString documentTitle() const
void setDocumentTitle(const QString &title)

6、lineWrapMode

        该属性表示自动换行策略,默认QPlainTextEdit::WidgetWidth。

QPlainTextEdit::LineWrapMode lineWrapMode() const
void setLineWrapMode(QPlainTextEdit::LineWrapMode mode)
QPlainTextEdit::LineWrapMode描述
NoWrap不换行
WidgetWidth文字被包装在文本编辑的右边缘,换行发生在空白处,保持整个单词完整

7、wordWrapMode

        该属性表示单词间换行策略,默认QTextOption::WrapAtWordBoundaryOrAnywhere。

QTextOption::WrapMode wordWrapMode() const
void setWordWrapMode(QTextOption::WrapMode policy)
QTextOption::WrapMode描述
NoWrap不换行
WordWrap文本在单词边界处换行
ManualWrap不换行
WrapAnywhere文本可以在一行中的任何点换行,即使它出现在单词的中间。
WrapAtWordBoundaryOrAnywhere优先在字边界处换行;否则,它将出现在行上的适当点上,甚至在单词的中间。

8、maximumBlockCount

        该属性表示文档块的最大个数,默认为0。当超出最大限制的时候,会从开头删除块。如果设置的是负数或者零,表示不限制。设置此属性会禁用撤消重做历史记录。

int maximumBlockCount() const
void setMaximumBlockCount(int maximum)

9、overwriteMode

        该属性保存用户输入的文本是否会覆盖现有文本。

        和许多文本编辑器一样,纯文本编辑器小部件可以配置为使用用户输入的新文本插入或覆盖现有文本。如果此属性为true,现有文本将被新文本逐字符覆盖;否则,将在光标位置插入文本,取代现有文本。

        大多数编辑器都是按下键盘的Insert键,开启此模式,软件实现可以响应按键事件,检测按下Insert按键的时候,切换此状态即可。

bool overwriteMode() const
void setOverwriteMode(bool overwrite)

10、placeholderText

        该属性表示当文档内容为空的时候显示占位符提示文本。

QString placeholderText() const
void setPlaceholderText(const QString &placeholderText)

11、plainText

        该属性表示当前文本内容,重新设置会覆盖之前的内容,撤销/重做历史将被重置,如果光标不在开头,那么文本格式也会被重置。

QString toPlainText() const
void setPlainText(const QString &text)

12、readOnly

        该属性表示内容是否可只读,默认false。

bool isReadOnly() const
void setReadOnly(bool ro)

13、tabChangesFocus

        该属性表示用户按下Tab键是否缩进,默认fasle。

bool tabChangesFocus() const
void setTabChangesFocus(bool b)

14、tabStopDistance

        该属性表示以像素为单位保存制表位距离,默认情况下,此属性的值为80。这个属性在Qt 5.10中被引入。

qreal tabStopDistance() const
void setTabStopDistance(qreal distance)

15、textInteractionFlags

        该属性表示显示文本如何与用户输入交互策略,readOnly属性会影响这个策略。

Qt::TextInteractionFlags textInteractionFlags() const
void setTextInteractionFlags(Qt::TextInteractionFlags flags)
Qt::TextInteractionFlag描述
NoTextInteraction不与文本做交互
TextSelectableByMouse可以用鼠标选择文本,并使用上下文菜单或标准键盘快捷键将文本复制到剪贴板
TextSelectableByKeyboard可以用键盘上的光标键选择文本。显示一个文本光标。
LinksAccessibleByMouse链接可以用鼠标突出显示和激活。
LinksAccessibleByKeyboard链接可以使用tab键聚焦,并使用enter键激活。
TextEditable文本是完全可编辑的。
TextEditorInteractionTextSelectableByMouse+TextSelectableByKeyboard+TextEditable
TextBrowserInteractionTextSelectableByMouse+LinksAccessibleByMouse+LinksAccessibleByKeyboard

16、undoRedoEnabled

        该属性表示是否开启撤销和重做,默认开启。

bool isUndoRedoEnabled() const
void setUndoRedoEnabled(bool enable)

17、公共函数

1)anchorAt

        返回位置pos处锚的引用,如果该点不存在锚,则返回一个空字符串。

QString anchorAt(const QPoint &pos) const

        当我们需要在文档上打开一个链接,逻辑是鼠标在链接处按下并且在此链接上释放,可以通过鼠标按下和释放事件去检测鼠标事件触发。但我们如何去判断是否在同一个链接上触发的事件,这时候就需要用到anchorAt去检测某pos处的锚。

#ifndef PLAINTEXTEDIT_H
#define PLAINTEXTEDIT_H#include <QPlainTextEdit>
#include <QMouseEvent>class PlainTextEdit : public QPlainTextEdit
{Q_OBJECTprivate:QString clickedAnchorStr;public:explicit PlainTextEdit(QWidget *parent = 0) : QPlainTextEdit(parent){}void mousePressEvent(QMouseEvent *e){clickedAnchorStr = (e->button() & Qt::LeftButton) ? anchorAt(e->pos()) :QString();QPlainTextEdit::mousePressEvent(e);}void mouseReleaseEvent(QMouseEvent *e){if (e->button() & Qt::LeftButton && !clickedAnchor.isEmpty() &&anchorAt(e->pos()) == clickedAnchorStr){emit linkActivated(clickedAnchor);}QPlainTextEdit::mouseReleaseEvent(e);}signals:void linkActivated(QString);
};

2)canPaste

        返回是否可以粘贴。

bool canPaste() const

3)createStandardContextMenu

        当用户鼠标右击的时候创建和显示一个menu菜单栏小窗口,一般在contextMenuEvent事件中触发。

QMenu *createStandardContextMenu()
QMenu *createStandardContextMenu(const QPoint &position)
 void MyQPlainTextEdit::contextMenuEvent(QContextMenuEvent *event){QMenu *menu = createStandardContextMenu();menu->addAction(tr("My Menu Item"));//...menu->exec(event->globalPos());delete menu;}

4)currentCharFormat

        返回当前使用的的字符格式。

QTextCharFormat currentCharFormat() const

5)setCurrentCharFormat

        设置当前使用的字符格式QTextCharFormat

void setCurrentCharFormat(const QTextCharFormat &format)

6)cursorForPosition

        返回某坐标下的文本光标QTextCursor(包含关于光标在文本中的位置和它所做的任何选择的信息),经典用法用来判断是否越界。  

QTextCursor cursorForPosition(const QPoint &pos) const

7)cursorRect

        返回一个包含文本光标的QRect矩形,经典用法用来判断是否越界。

QRect cursorRect(const QTextCursor &cursor) const
QRect cursorRect() const

8)document

        返回文档类QTextDocument。

QTextDocument *document() const

9)setDocument

        设置一个文档类QTextDocument,使它成为编辑器的文档。

void setDocument(QTextDocument *document)

10)ensureCursorVisible

        通过滚动文档让光标可见。

void ensureCursorVisible()

11)setExtraSelections

void setExtraSelections(const QList<QTextEdit::ExtraSelection> &selections)

        此函数允许用给定的颜色临时标记文档中的某些区域,指定为选择。例如,在编程编辑器中,用给定的背景颜色标记整行文本以指示断点的存在。

12)extraSelections

        返回设置的额外选择项。

QList<QTextEdit::ExtraSelection> extraSelections() const

13)find

        多个方法查找字符、表达式、正则表达式是否存在。

bool find(const QString &exp, QTextDocument::FindFlags options = QTextDocument::FindFlags())
bool find(const QRegExp &exp, QTextDocument::FindFlags options = QTextDocument::FindFlags())
bool find(const QRegularExpression &exp, QTextDocument::FindFlags options = QTextDocument::FindFlags())

14)loadResource

加载由给定类型和名称指定的资源。这个函数是QTextDocument::loadResource()的扩展。

QVariant loadResource(int type, const QUrl &name)

15)moveCursor

        通过执行给定的操作移动光标。

 void moveCursor(QTextCursor::MoveOperation operation, QTextCursor::MoveMode mode = QTextCursor::MoveAnchor)

16)print

         这相当于直接调用文档上的print方法,只不过该函数还支持QPrinter::Selection作为打印范围。

void print(QPagedPaintDevice *printer) const

17)toPlainText

        纯文本形式返回字符串。

QString toPlainText() const

17、公共槽

 void appendHtml(const QString &html)        //尾部加入html格式文本void appendPlainText(const QString &text)   //尾部添加纯文本void centerCursor()                         //居中光标void clear()                                //清除void copy()                                 //复制void cut()                                  //剪切void insertPlainText(const QString &text)   //插入纯文本void paste()                                //粘贴void redo()                                 //重做void selectAll()                            //选择全部void setPlainText(const QString &text)      //清空之前的文本,并设置纯文本void undo()                                 //撤销void zoomIn(int range = 1)                  //缩小void zoomOut(int range = 1                  //放大

18、信号

//文本块数量改变触发
void blockCountChanged(int newBlockCount)//可复制触发
void copyAvailable(bool yes)//光标位置改变触发
void cursorPositionChanged()//修改状态发生更改时,触发此信号
void modificationChanged(bool changed)//可重做触发
void redoAvailable(bool available)//选择内容改变触发
void selectionChanged()//文本内容改变触发
void textChanged()//可撤销触发
void undoAvailable(bool available)//文档更新触发,rect表示新视口区域,dy表示滚动像素量
void updateRequest(const QRect &rect, int dy)

相关文章:

Qt应用开发(基础篇)——高级纯文本窗口 QPlainTextEdit

一、前言 QPlainTextEdit类继承于QAbstractScrollArea&#xff0c;QAbstractScrollArea继承于QFrame&#xff0c;是Qt用来显示和编辑纯文本的窗口。 滚屏区域基类https://blog.csdn.net/u014491932/article/details/132245486?spm1001.2014.3001.5501框架类QFramehttps://blo…...

三维可视化平台有哪些?Sovit3D可视化平台怎么样?

随着社会经济的发展和数字技术的进步&#xff0c;互联网行业发展迅速。为了适应新时代社会发展的需要&#xff0c;大数据在这个社会经济发展过程中随着技术的进步而显得尤为重要。同时&#xff0c;大数据技术的快速发展进程也推动了可视化技术的飞速发展&#xff0c;国内外各类…...

Xxl-job安装部署以及SpringBoot集成Xxl-job使用

1、安装Xxl-job&#xff1a; 可以使用docker拉取镜像部署和源码编译两种方式&#xff0c;这里选择源码编译安装。 代码拉取地址&#xff1a; https://github.com/xuxueli/xxl-job/tree/2.1.2 官方开发文档&#xff1a; https://www.xuxueli.com/xxl-job/#%E3%80%8A%E5%88%…...

【【超声波避障小车代码】】

超声波避障小车代码 #include <reg51.h> //通用51头文件 #include <intrins.h> //使用了_nop()_函数#define uchar unsigned char //用 uchar 表示 unsigned char 类型 #define uint unsigned int //用 uint 表示 unsigned int 类型sbit EN…...

TDI(Time Delay Integration)

TDI&#xff08;Time Delay Integration&#xff09;是一种特殊的图像采集技术&#xff0c;常用于线阵CCD&#xff08;Charge-Coupled Device&#xff09;相机。TDI技术可以在保持高分辨率的同时增强图像的信噪比&#xff08;Signal-to-Noise Ratio, SNR&#xff09;&#xff0…...

RHCE——一、安装部署及例行性工作

RHCE 一、网络服务1、准备工作2、RHEL9操作系统的安装部署3、配置并优化RHEL9操作系统4、网络配置5、修改网络连接 二、例行性工作1、单一执行的例行性工作2、循环执行的例行性工作 三、书写定时任务的注意事项四、系统级别的计划任务五、实验1、实验一&#xff1a;编写脚本tes…...

服务器数据库中了360后缀勒索病毒怎么办?360后缀勒索病毒的加密形式

随着信息技术的发展&#xff0c;企业的计算机服务器数据库变得越来越重要。然而&#xff0c;在数字时代&#xff0c;网络上的威胁也日益增多。近期&#xff0c;我们收到很多企业的求助&#xff0c;企业的计算机服务器遭到了360后缀勒索病毒的攻击&#xff0c;导致服务器内的所有…...

期权就是股指期货吗,哪个好做一点?

近年来&#xff0c;场内ETF期权产品不断扩大&#xff0c;越来越多的投资者有投资期权的想法。当我们看到期权时&#xff0c;我们会不知不觉地想到期货&#xff0c;虽然期货与期权只有一个字的区别&#xff0c;但实际上有很大的不同&#xff0c;那么期权就是股指期货吗&#xff…...

week32

本周目标&#xff1a; Belady现象的解释 操作系统 计组IO/MM chapter 刷力扣 ubuntu磁盘/网络/命令行进阶*1 tarball之类的使用 Question 大数据系统实验要学吗&#xff1f; 据说课讲得不好这是一门类似数据库的课程——大数据之hadoop / hive / hbase 的区别是什么&a…...

【数据库】P1 数据库基本常识

数据库基本常识 数据库 ≠ 数据库管理系统表&#xff08;Table&#xff09;SQL是什么 数据库 ≠ 数据库管理系统 数据库是保存有组织的数据的容器&#xff0c;数据库称为 DB&#xff08;DataBase&#xff09;&#xff1b;数据库管理系统是创建和操纵数据库的软件&#xff0c;数…...

c语言——计算两个数的乘积

//计算两个数的乘积 #include<stdio.h> #include<stdlib.h> int main() {double firstNumber,secondNumber,product;printf("两个浮点数&#xff1a;");scanf("%lf,%lf",&firstNumber,&secondNumber);productfirstNumber*secondNumber…...

单机模型并行最佳实践

单机模型并行最佳实践 模型并行在分布式训练技术中被广泛使用。 先前的帖子已经解释了如何使用 DataParallel 在多个 GPU 上训练神经网络&#xff1b; 此功能将相同的模型复制到所有 GPU&#xff0c;其中每个 GPU 消耗输入数据的不同分区。 尽管它可以极大地加快训练过程&…...

编程练习(3)

一.选择题 第一题&#xff1a; 函数传参的两个变量都是传的地址&#xff0c;而数组名c本身就是地址&#xff0c;int型变量b需要使用&符号&#xff0c;因此答案为A 第二题&#xff1a; 本题考察const修饰指针变量&#xff0c;答案为A,B,C,D 第三题&#xff1a; 注意int 型变…...

PyTorch学习笔记(十三)——现有网络模型的使用及修改

以分类模型的VGG为例 vgg16_false torchvision.models.vgg16(weightsFalse) vgg16_true torchvision.models.vgg16(weightsTrue) 设置为 False 的情况&#xff0c;相当于网络模型中的参数都是初始化的、默认的设置为 True 时&#xff0c;网络模型中的参数在数据集上是训练好…...

Python爬虫的scrapy的学习(学习于b站尚硅谷)

目录 一、scrapy  1. scrapy的安装  &#xff08;1&#xff09;什么是scrapy  &#xff08;2&#xff09;scrapy的安装 2. scrapy的基本使用  &#xff08;1&#xff09;scrap的使用步骤  &#xff08;2&#xff09;代码的演示 3. scrapy之58同城项目结构和基本方法&…...

“深入解析JVM:揭秘Java虚拟机的工作原理“

标题&#xff1a;深入解析JVM&#xff1a;揭秘Java虚拟机的工作原理 摘要&#xff1a;本文将深入解析Java虚拟机&#xff08;JVM&#xff09;的工作原理&#xff0c;探讨其内部结构和运行机制。我们将介绍JVM的组成部分、类加载过程、内存管理、垃圾回收、即时编译等关键概念&…...

【数据结构与算法】十大经典排序算法-归并排序

&#x1f31f;个人博客&#xff1a;www.hellocode.top &#x1f3f0;Java知识导航&#xff1a;Java-Navigate &#x1f525;CSDN&#xff1a;HelloCode. &#x1f31e;知乎&#xff1a;HelloCode &#x1f334;掘金&#xff1a;HelloCode ⚡如有问题&#xff0c;欢迎指正&#…...

基于深度学习创建-表情符号--附源码

表情符号深度学习概述 如今,我们使用多种表情符号或头像来表达我们的心情或感受。它们充当人类的非语言线索。它们成为情感识别、在线聊天、品牌情感、产品评论等的关键部分。针对表情符号驱动的故事讲述的数据科学研究不断增加。 从图像中检测人类情绪非常流行,这可能是由…...

.netcore grpc的proto文件字段详解

一、.proto文件字段概述 grpc的接口传输参数都是根据.proto文件约定的字段格式进行传输的grpc提供了多种类型字段&#xff1b;主要包括标量值类型&#xff08;基础类型&#xff09;、日期时间、可为null类型、字节、列表、字典、Any类型&#xff08;任意类型&#xff09;、One…...

带你了解建堆的时间复杂度

目录 用向上调整建堆的时间复杂度 1.向上调整建堆的时间复杂度O(N*logN) 2.数学论证 3.相关代码 用向下调整建堆的时间复杂度 1.建堆的时间复杂度为O(N) 2.数学论证 3.相关代码 完结撒花✿✿ヽ(▽)ノ✿✿ 博主建议:面试的时候可能会被面试官问到建堆时间复杂度的证明过…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK&#xff0c;开始写第二篇的内容了。这篇博客主要能写一下&#xff1a; 如何给一些三方库按照xmake方式进行封装&#xff0c;供调用如何按…...

python/java环境配置

环境变量放一起 python&#xff1a; 1.首先下载Python Python下载地址&#xff1a;Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个&#xff0c;然后自定义&#xff0c;全选 可以把前4个选上 3.环境配置 1&#xff09;搜高级系统设置 2…...

pam_env.so模块配置解析

在PAM&#xff08;Pluggable Authentication Modules&#xff09;配置中&#xff0c; /etc/pam.d/su 文件相关配置含义如下&#xff1a; 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块&#xff0c;负责验证用户身份&am…...

postgresql|数据库|只读用户的创建和删除(备忘)

CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

cf2117E

原题链接&#xff1a;https://codeforces.com/contest/2117/problem/E 题目背景&#xff1a; 给定两个数组a,b&#xff0c;可以执行多次以下操作&#xff1a;选择 i (1 < i < n - 1)&#xff0c;并设置 或&#xff0c;也可以在执行上述操作前执行一次删除任意 和 。求…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及&#xff0c;充电桩作为核心配套设施&#xff0c;其安全性与可靠性备受关注。然而&#xff0c;在高温、高负荷运行环境下&#xff0c;充电桩的散热问题与消防安全隐患日益凸显&#xff0c;成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

C# SqlSugar:依赖注入与仓储模式实践

C# SqlSugar&#xff1a;依赖注入与仓储模式实践 在 C# 的应用开发中&#xff0c;数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护&#xff0c;许多开发者会选择成熟的 ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;SqlSugar 就是其中备受…...

精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南

精益数据分析&#xff08;97/126&#xff09;&#xff1a;邮件营销与用户参与度的关键指标优化指南 在数字化营销时代&#xff0c;邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天&#xff0c;我们将深入解析邮件打开率、网站可用性、页面参与时…...