十九、【文本编辑器(五)】排版功能


目录

一、搭建框架

二、实现段落对齐

三、实现文本排序


一、搭建框架

(1) 在imgprocessor.h文件中添加private变量:

    QLabel *listLabel;                              //排序设置项QComboBox *listComboBox;QActionGroup *actGrp;QAction *leftAction;QAction *rightAction;QAction *centerAction;QAction *justifyAction;QToolBar *listToolBar;                          //排序工具栏

 (2) 在文件中添加protected slots函数:

    void ShowList(int);void ShowAlignment(QAction *act);void ShowCursorPositionChanged();

(3)  在ImgProcessor构造函数中,添加如下代码:

    //排序listLabel =new QLabel(tr("排序"));listComboBox =new QComboBox;listComboBox->addItem("Standard");listComboBox->addItem("QTextListFormat::ListDisc");listComboBox->addItem("QTextListFormat::ListCircle");listComboBox->addItem("QTextListFormat::ListSquare");listComboBox->addItem("QTextListFormat::ListDecimal");listComboBox->addItem("QTextListFormat::ListLowerAlpha");listComboBox->addItem("QTextListFormat::ListUpperAlpha");listComboBox->addItem("QTextListFormat::ListLowerRoman");listComboBox->addItem("QTextListFormat::ListUpperRoman");

(4) 在构造函数的最后部分添加相关的事件关联:

    connect(listComboBox,SIGNAL(activated(int)),this,SLOT(ShowList(int)));connect(showWidget->text->document(),SIGNAL(undoAvailable(bool)),redoAction,SLOT(setEnabled(bool)));connect(showWidget->text->document(),SIGNAL(redoAvailable(bool)),redoAction,SLOT(setEnabled(bool)));connect(showWidget->text,SIGNAL(cursorPositionChanged()),this,SLOT(ShowCursorPositionChanged()));

(5) 在相对应的工具栏 createActions 函数中添加如下代码:

    //排序:左对齐、右对齐、居中和两端对齐actGrp =new QActionGroup(this);leftAction =new QAction(QIcon("left.png"),"左对齐",actGrp);leftAction->setCheckable(true);rightAction =new QAction(QIcon("right.png"),"右对齐",actGrp);rightAction->setCheckable(true);centerAction =new QAction(QIcon("center.png"),"居中",actGrp);centerAction->setCheckable(true);justifyAction =new QAction(QIcon("justify.png"),"两端对齐",actGrp);justifyAction->setCheckable(true);connect(actGrp,SIGNAL(triggered(QAction*)),this,SLOT(ShowAlignment(QAction*)));

(6) 在相对应的工具栏 createToolBars()函数中添加如下代码:

    //排序工具条listToolBar =addToolBar("list");listToolBar->addWidget(listLabel);listToolBar->addWidget(listComboBox);listToolBar->addSeparator();                //添加一个分隔符listToolBar->addActions(actGrp->actions());

二、实现段落对齐

        完成对按下某个对齐按钮的响应用ShowAlignment()函数,根据比较判断触发的是哪个对齐按钮,调用 QTextEdit 的 setAlignment 函数可以实现当前段落的对齐调整。具体代码如下:

void ImgProcessor::ShowAlignment(QAction *act)
{if(act==leftAction)showWidget->text->setAlignment(Qt::AlignLeft);if(act==rightAction)showWidget->text->setAlignment(Qt::AlignRight);if(act==centerAction)showWidget->text->setAlignment(Qt::AlignCenter);if(act==justifyAction)showWidget->text->setAlignment(Qt::AlignJustify);
}

        响应文本中光标位置处发生改变的信号的ShowCursorPositionChanged()函数代码如下:

//显示光标处的对齐方式
void ImgProcessor::ShowCursorPositionChanged()
{if(showWidget->text->alignment()==Qt::AlignLeft)leftAction->setChecked(true);if(showWidget->text->alignment()==Qt::AlignRight)rightAction->setChecked(true);if(showWidget->text->alignment()==Qt::AlignCenter)centerAction->setChecked(true);if(showWidget->text->alignment()==Qt::AlignJustify)justifyAction->setChecked(true);
}

        完成四个对齐按钮的状态更新。通过调用 QTextEdit 类的alignment()函数获得当前光标所在处段落的对齐方式,设置相应的对齐按钮为按下状态。

三、实现文本排序

        文本排序功能实现的基本流程,如下图所示:

        

        主要用于描述文本排序格式的 QTextListFormat 包含两个基本的属性,一个为QTextListFormat::style , 表 示文本 采用哪 种排序 方式;另 一 个为QTextListFormat::indent, 表示排序后的缩进值。因此,若要实现文本排序的功能则只需设置好 QTextListFormat 的以上两个属性,并将整个格式通过 QTextCursor 类应用到文本中即可。 

void ImgProcessor::ShowList(int index)
{QTextCursor cursor=showWidget->text->textCursor();if(index!=0){QTextListFormat::Style style=QTextListFormat::ListDisc;     //用于描述文本排序格式QTextListFormatswitch(index)                                               //设置style属性值{default:case 1:style=QTextListFormat::ListDisc; break;case 2:style=QTextListFormat::ListCircle; break;case 3:style=QTextListFormat::ListSquare; break;case 4:style=QTextListFormat::ListDecimal; break;case 5:style=QTextListFormat::ListLowerAlpha; break;case 6:style=QTextListFormat::ListUpperAlpha; break;case 7:style=QTextListFormat::ListLowerRoman; break;case 8:style=QTextListFormat::ListUpperRoman; break;}cursor.beginEditBlock();                //设置缩进值QTextBlockFormat blockFmt=cursor.blockFormat();QTextListFormat listFmt;if(cursor.currentList()){listFmt= cursor.currentList()->format();}else{listFmt.setIndent(blockFmt.indent()+1);blockFmt.setIndent(0);cursor.setBlockFormat(blockFmt);}listFmt.setStyle(style);cursor.createList(listFmt);cursor.endEditBlock();}else{QTextBlockFormat bfmt;bfmt.setObjectIndex(-1);cursor.mergeBlockFormat(bfmt);}
}

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

基于jeecgboot-vue3的Flowable流程支持bpmn流程设计器与仿钉钉流程设计器-编辑多版本处理

因为这个项目license问题无法开源,更多技术支持与服务请加入我的知识星球。 1、前端编辑带有仿钉钉流程的处理 /** 编辑流程设计弹窗页面 */const handleLoadXml (row) > {console.log("handleLoadXml row",row)const params {flowKey: row.key,ver…

PDF Reader 编辑阅读软件 for Mac v4.0.4(办公必备,小白简单易上手)

Mac分享吧 文章目录 效果一、下载软件二、开始安装1、双击运行软件,将其从左侧拖入右侧文件夹中,等待安装完毕2、应用程序显示软件图标,表示安装成功 三、运行测试1、打开软件 安装完成!!! 效果 一、下载软…

redis其他类型和配置文件

很多博客只讲了五大基本类型,确实,是最常用的,而且百分之九十的程序员对于Redis只限于了解String这种最常用的。但是我个人认为,既然Redis官方提供了其他的数据类型,肯定是有相应的考量的,在某些特殊的业务…

51单片机嵌入式开发:11、 STC89C52RC 实现一个滑动的led点阵程序

STC89C52RC 实现一个滑动的led点阵程序 1 概述2 LED点阵介绍2.1 LED概述2.2 LED点阵注意事项 3 LED点阵原理3.1 Led点阵内部电路3.2 原理图电路 4 软件实现点阵图案的滑动4.1 软件工程代码4.2 Protues仿真 5 扩展74HC595(后续专题开展)6 总结 第十一节 1…

MySQL—— if/cast/case.... end/md5 函数

目录 1. if 使用 2. if 嵌套 ​3. case ... end 4. 类型转换 cast() 5. 加密函数 md5() 1. if 使用 将姓名为smith的员工工资上调10%; 2. if 嵌套 如果岗位是manager,工资上调10%,如果岗位是s…

camtasia怎么剪掉不用的部分 屏幕录制的视频怎么裁剪上下不要的部分 camtasia studio怎么裁剪视频时长 camtasia怎么剪辑视频教程

有时我们录制的屏幕内容,并不一定全部需要。那么,屏幕录制的视频怎么裁剪上下不要的部分?可以使用视频剪辑软件,或者微课制作工具来进行裁剪。屏幕录制的视频怎么旋转?录制视频的旋转也是一样的,均在编辑步…

10.1 标注、注记图层和注记整体说明

文章目录 前言标注、注记图层和注记QGis中的标注QGis中的注释(Annotation)图层QGis中的注记 总结 前言 介绍标注、注记图层和注记说明:文章中的示例代码均来自开源项目qgis_cpp_api_apps 标注、注记图层和注记 有时地图需要使用一些文字信息说明其中的地理要素或其…

Redis系列命令更新--Redis列表命令

Redis列表 1、Redis Blpop命令: (1)说明:Redis Blpop命令移出并获取列表的第一个元素;如果列表没有元素会阻塞列表直到等到超时或发现可弹出元素为止 (2)语法:redis 127.0.0.1:63…

IDEA快速生成项目树形结构图

下图用的IDEA工具,但我觉得WebStorm 应该也可以 文章目录 进入项目根目录下,进入cmd输入如下指令: 只有文件夹 tree . > list.txt 包括文件夹和文件 tree /f . > list.txt 还可以为相关包路径加上注释

程控电阻器

程控电阻器 由于要测试电阻型温度传感器,一个电阻箱又很贵,就想做一款 程控电阻器 来满足。 设计满足300Ω到400kΩ可调电阻。 设计思路 选择数字电位器去控制电阻输出,最好是精度高,范围大的数字电位器。经过寻找后,发…

CentOS 7 Web面板的文件管理器说明

在使用CentOS 7 Web Panel(CWP7)时,偶尔要求在服务器曲面上修改,创建,编辑或删除文件。 最简单,最直接的方式是通过利用CWP7的内置文件管理器。 本文将详细介绍如何启动它,使用它,以…

【D3.js in Action 3 精译】2.3 用 D3 选中页面元素

当前内容所在位置 第一部分 D3.js 基础知识 第一章 D3.js 简介(已完结) 1.1 何为 D3.js?1.2 D3 生态系统——入门须知1.3 数据可视化最佳实践(上)1.3 数据可视化最佳实践(下)1.4 本章小结 第二章…

C语言基础and数据结构

C语言程序和程序设计概述 程序:可以连续执行的一条条指令的集合 开发过程:C源程序(.c文件) --> 目标程序(.obj二进制文件,目标文件) --> 可执行文件(.exe文件) -->结果 在任何机器上可以运行C源程序生成的 .exe 文件 没有安装C语言集成开发环境,不能编译C语言程…

【数据结构】二叉树全攻略,从实现到应用详解

​ 💎所属专栏:数据结构与算法学习 💎 欢迎大家互三:2的n次方_ ​ 🍁1. 树形结构的介绍 树是一种非线性的数据结构,它是由n(n>0)个有限结点组成一个具有层次关系的集合。把它叫做…

Java18的主要新特性总结

目录 概述 变动说明 重要变更和信息 下载地址 Java18新特性总结 1、JEP 420: Switch 的模式匹配(第二次预览) 功能进化 Switch 模式匹配 类型标签 null标签 守卫标签 2、JEP 400:默认UTF-8编码 3、JEP 408:简易Web服务…

Java 虚拟线程:案例研究

一. 关键要点 虚拟线程是 Java 并发编程的一个重要进步,但在运行典型的云原生 Java 工作负载方面,它们并不比 Open Liberty 现有的自主线程池具有明显的优势。对于 CPU 密集型工作负载,由于目前尚不清楚的原因,虚拟线程的吞吐量低…

Idea如何快速高效的修改项目的包名

文章目录 前言一、全局替换的快捷键二、弹出如下的界面 前言 当我们有时候在做项目迁移的时候,需要快速的修改项目的包名!那么如何快速高效的修改项目的报名呢? 经过尝试了很多方法!最简单的方法就是利用全局替换来直接替换报名&…

QT实现带动态弹出动画的自定义通知提示框

Qt中经常会用到提示框,用于交互操作!QMessageBox是被大多数人用到的,用起来是很方便,但是控件类型、大小、布局、样式、往往不是开发者想要的。本实例实现的Notification控件,是一种悬浮在角落的通知提醒框。 一、简述…

Day07-ES集群加密,kibana的RBAC实战,zookeeper集群搭建,zookeeper基本管理及kafka单点部署实战

Day07-ES集群加密,kibana的RBAC实战,zookeeper集群搭建,zookeeper基本管理及kafka单点部署实战 0、昨日内容回顾:1、基于nginx的反向代理控制访问kibana2、配置ES集群TSL认证:3、配置kibana连接ES集群4、配置filebeat连接ES集群5、配置logsta…

Mysql-错误处理: Found option without preceding group in config file

1、问题描述 安装MYSQL时,在cmd中“初始化”数据库时,输入命令: mysqld --initialize --consolecmd报错: D:\mysql-5.7.36-winx64\bin>mysql --initialize --console mysql: [ERROR] Found option without preceding group …