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_OBJECT

private:
    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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/82587.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

clion软件ide的安装和环境配置@ubuntu

1.官网&#xff1a; Download CLion 2.安装Clion 直接在官网下载并安装即可&#xff0c;过程很简单 https://www.jetbrains.com/clion/ https://www.jetbrains.com/clion/download/#sectionlinux 3.激活码 4.配置Clion 安装gcc、g、make Ubuntu中用到的编译工具是gcc©…

C#系统锁屏事件例子 - 开源研究系列文章

今天有个网友问了个关于操作系统锁屏的问题。 我们知道&#xff0c;操作系统是基于消息和事件处理的&#xff0c;所以我们只要找到该操作系统锁屏和解屏的那个事件&#xff0c;然后在事件里进行处理即可。下面是例子介绍。 1、 项目目录&#xff1b; 下面是项目目录&#xff1a…

​8th参考文献:[8]许少辉.乡村振兴战略下传统村落文化旅游设计[M]北京:中国建筑出版传媒,2022.

​&#xff18;th参考文献&#xff1a;&#xff3b;&#xff18;&#xff3d;许少辉&#xff0e;乡村振兴战略下传统村落文化旅游设计&#xff3b;&#xff2d;&#xff3d;北京&#xff1a;中国建筑出版传媒&#xff0c;&#xff12;&#xff10;&#xff12;&#xff12;&…

残差网络实现

代码中涉及的图片实验数据下载地址&#xff1a;https://download.csdn.net/download/m0_37567738/88235543?spm1001.2014.3001.5501 代码&#xff1a; import torch import torch.nn as nn import torch.nn.functional as F #from utils import load_data,get_accur,train i…

PHP自己的框架实现操作成功失败跳转(完善篇四)

1、实现效果&#xff0c;操作成功后失败成功自动跳转 2、创建操作成功失败跳转方法CrlBase.php /**成功后跳转*跳转地址$url* 跳转显示信息$msg* 等待时间$wait* 是否自动跳转$jump*/protected function ok($urlNULL,$msg操作成功,$wait3,$jump1){$code1;include KJ_CORE./tp…

【前缀和】算法实战

文章目录 一、算法原理1. 一维前缀和2. 二维前缀和 二、算法实战1. leetcode560 和为K的子数组2. leetcode974 和可被K整除的子数组3. leetcode525 连续数组4. leetcode1314 矩阵区域和5. leetcode724 寻找数组的中心下标6. leetcode238 除自身以外数组的乘积 三、总结 一、算法…

Linux/Ubuntu 的日常升级和安全更新,如何操作?

我安装的是Ubuntu 20.04.6 LTS的Windows上Linux子系统版本&#xff0c;启动完成后显示&#xff1a; Welcome to Ubuntu 20.04.6 LTS (GNU/Linux 5.15.90.4-microsoft-standard-WSL2 x86_64) * Documentation: https://help.ubuntu.com * Management: https://landscape.c…

每天一道leetcode:934. 最短的桥(图论中等广度优先遍历)

今日份题目&#xff1a; 给你一个大小为 n x n 的二元矩阵 grid &#xff0c;其中 1 表示陆地&#xff0c;0 表示水域。 岛 是由四面相连的 1 形成的一个最大组&#xff0c;即不会与非组内的任何其他 1 相连。grid 中 恰好存在两座岛 。 你可以将任意数量的 0 变为 1 &#…

Go 安装配置

介绍Ubuntu20.04 安装和配置Go 可以参考官网的这个为 Go 开发配置Visual Studio Code - Go on Azure | Microsoft Learn 1.安装Go 去这个地方下载Go https://go.dev/doc/install 如果之前安装过&#xff0c;可以参考这个&#xff08;没有可以忽略&#xff09; 下载完成后执…

Linux Shell如果ping失败就重启网卡(详解)

直接上脚本 -------------------------------------------------------------------------- #vi /tmp/ping_check.sh #!/bin/bash IP="1.1.1.1" PacketLoss=`ping -c 4 -w 4 1.1.1.1 | grep packet loss | awk -F packet loss {print $1} | awk {print $NF}|se…

vsCode使用cuda

一、vsCode使用cuda 前情提要&#xff1a;配置好mingw&#xff1a; 1.安装cuda 参考&#xff1a; **CUDA Toolkit安装教程&#xff08;Windows&#xff09;&#xff1a;**https://blog.csdn.net/qq_42951560/article/details/116131410 2.在vscode中添加includePath c_cp…

Midjourney API 申请及使用

在人工智能绘图领域&#xff0c;想必大家听说过 Midjourney 的大名吧&#xff01; Midjourney 以其出色的绘图能力在业界独树一帜。无需过多复杂的操作&#xff0c;只要简单输入绘图指令&#xff0c;这个神奇的工具就能在瞬间为我们呈现出对应的图像。无论是任何物体还是任何风…

Android内存泄漏总结和性能优化技巧

我们在开发安卓应用时&#xff0c;性能优化是非常重要的方面。一方面&#xff0c;优化可以提高应用的响应速度、降低卡顿率和提升应用流畅度&#xff0c;从而提升用户体验&#xff1b;另一方面&#xff0c;优化也可以减少应用的资源占用&#xff0c;提高应用的稳定性和安全性&a…

如何在window下cmd窗口执行linux指令?

1.Git&#xff1a;https://git-scm.com/downloads(官网地址) 2.根据自己的实际路径,添加两个环境变量 3.重启电脑

【Selenium学习】环境搭建 API学习

目录 一、javaSelenium的环境搭建&#xff1f; 二、认识Selenium 1、什么是自动化&#xff1f; 2、什么是Selenium? (重点) 3、selenium的工作原理&#xff1f;&#xff08;重点&#xff09; 三、Selenium操作元素API&#xff08;重点&#xff09; 第一部分&#…

使用 HTML、CSS 和 JavaScript 创建实时 Web 编辑器

使用 HTML、CSS 和 JavaScript 创建实时 Web 编辑器 在本文中&#xff0c;我们将创建一个实时网页编辑器。这是一个 Web 应用程序&#xff0c;允许我们在网页上编写 HTML、CSS 和 JavaScript 代码并实时查看结果。这是学习 Web 开发和测试代码片段的绝佳工具。我们将使用ifram…

excel中有哪些通配符、excel配置问题,数学函数篇1之sum系列

学习excel前需要明确的是事&#xff1a;   在学习excel函数之前&#xff0c;大家需要明确一件事&#xff0c;excel现在设计到了一些新函数&#xff0c;这些新函数只能存在于office365、office2019及更 新版本之中&#xff0c;所以建议大家在学习时安装较新的版本&#xff0c;…

高阶数据结构-图

高阶数据结构-图 图的表示 图由顶点和边构成&#xff0c;可分为有向图和无向图 邻接表法 图的表示方法有邻接表法和邻接矩阵法&#xff0c;以上图中的有向图为例&#xff0c;邻接表法可以表示为 A->[(B,5),(C,10)] B->[(D,100)] C->[(B,3)] D->[(E,7)] E->[…

Ribbon:负载均衡及Ribbon

什么是负载均衡&#xff1f; 第一种轮询算法&#xff0c;依次遍历去执行&#xff0c;达到负载均衡 集成Ribbon 导入pom&#xff0c;在消费者服务里的pom文件导入 <!-- Ribbon 集成 --><!-- https://mvnrepository.com/artifact/org.springframework.cloud/spr…

-Webkit-Box 在 Safari 中出现的兼容性问题

一、问题背景&#xff1a; UI要求要实现这样的效果&#xff0c;使用 display:-webket-box在chrome浏览器下完美解决 但是马上啪啪打脸&#xff0c;在safari浏览器下显示空白 &#xff0c;不能不说浏览器之间的兼容性简直就是天坑 二、解决办法 通过浏览器调试发现原本float的…