文章目录

  • 一、实现段落对齐
  • 二、实现文本排序

一、实现段落对齐

  完成对按下某个对齐按钮的响应函数,根据比较判断触发的是哪个对齐按钮,调用 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);}

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

 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 类应用到文本中即可。
  在通常的文本编辑器中,QTextListFormat 的缩进值 indent 都是预设好的,并不需要由用户设定。
  本实例采用在程序中通过获取当前文本段 QTextBlockFormat 的缩进值来进行相应的计算的方法,以获得排序文本的缩进值。
  实现根据用户选择的不同排序方式对文本进行排序的函数代码如下:

 void ImgProcessor::showList(int index){//获得编辑框 QTextCursor 对象指针QTextCursor cursor = showWidget->text->textCursor();if(index != 0){QTextListFormat::Style style = QTextListFormat::ListDisc;    //(a)switch(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;}/*设置缩进值*/                                             //(b)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);}}

(a)从下拉列表框中选择确定 QTextListFormat 的 style 属性值。Qt 提供了 8 种文本排序的方式,分别是 QTextListFormat::ListDisc、QTextListFormat::ListCircle、QTextListFormat::ListSquare、QTextListFormat::ListDecimal、QTextListFormat::ListLowerAlpha、QTextListFormat::ListUpperAlpha、QTextListFormat::ListLowerRoman 和 QTextListFormat::ListUpperRoman。
(b) cursor.beginEditBlock();
   …
   cursor.endEditBlock();
  此段代码完成 QTextListFormat 的另一个属性 indent (即缩进值)的设定,并将设置的格式应用到光标所在的文本处。
  以 cursor.beginEditBlock() 开始,以 cursor.endEditBlock() 结束,这两个函数的作用是设定这两个函数之间的所有操作相当于一个动作。如果需要进行撤销或恢复,则这两个函数之间的所有操作将同时被撤销或恢复,这两个函数通常成对出现。
  设置 QTextListFormat 的缩进值首先通过 QTextCursor 获得 QTextBlockFormat 对象,由 QTextBlockFormat 获得段落的缩进值,在此基础上定义 QTextListFormat 的缩进值,本实例是在段落缩进的基础上加 1 ,也可根据需要进行其他设定。


QT5开发及实例学习之十四Qt5排版功能相关推荐

  1. QT5开发及实例学习之十六Qt5基础图形的绘制

    文章目录 前言 一.绘图框架设计 二.绘图区的实现 三.主窗口的实现 前言   设计界面,区分各种形状及画笔颜色.画笔线宽.画笔风格.画笔顶帽.画笔连接点.填充模式.铺展效果.画刷颜色.画刷风格设置等 ...

  2. QT5开发及实例学习之十五Qt5位置相关函数

    一.区别概述   Qt 提供了很多关于获取窗体位置及显示区域大小的函数,如 x().y() 和 pos().rect().size().geometry() 等,统称为"位置相关函数&quo ...

  3. QT5开发及实例学习之十二Qt5图像坐标变换

    文章目录 前言 一.缩放功能 二.旋转功能 三.镜像功能 前言   QMatrix 类提供了世界坐标系统的二维转换功能,可以使窗体转换变形,经常在绘图程序中使用,还可以实现坐标系统的移动.缩放.变形及 ...

  4. QT5开发及实例学习之十Qt5主窗口构成

    文章目录 一.基本元素 1.菜单栏 2.状态栏 3.工具栏 4.锚接部件 5.中心部件 6.激活上下文菜单 二.文本编辑器示例 三.菜单与工具栏的实现 1. 动作(Action)的实现 2. 菜单(M ...

  5. QT5开发及实例学习之十八显示Qt5 SVG格式图片

      SVG 的英文全称是 Scalable Vector Graphics,即可缩放的矢量图形.它是由万维网络联盟 ( World Wide Web Consortium, W3C ) 在 2000 ...

  6. QT5开发及实例学习之十九图形视图体系结构

    文章目录 一.Graphics View 框架结构的主要特点 二.Graphics View 框架结构的三元素 2.1 场景类:QGraphicsScene 类 2.2 视图类:QGraphicsVi ...

  7. 学习 Python 之 Pygame 开发魂斗罗(十四)

    学习 Python 之 Pygame 开发魂斗罗(十四) 继续编写魂斗罗 1. 创建桥类 2. 在主类中加入一些类变量 3. 显示桥 4. 解决玩家与桥的碰撞体问题 5. 解决敌人与桥的碰撞体问题 继 ...

  8. cc2530定时器和捕获比较_ALIENTEK 阿波罗 STM32F767 开发板资料连载十四章 输入捕获实验...

    1)实验平台:alientek 阿波罗 STM32F767 开发板2)摘自<STM32F7 开发指南(HAL 库版)>关注官方微信号公众号,获取更多资料:正点原子 http://weixi ...

  9. Android开发笔记(五十四)数据共享接口ContentProvider

    ContentProvider 前面几节介绍了进程间通信的几种方式,包括消息包级别的Messenger.接口调用级别的AIDL.启动页面/服务级别的Notification,还有就是本节这个数据库级别 ...

最新文章

  1. 关于 $'\r': 未找到命令的解决(bad interpreter )
  2. 愈学习愈发现自己的无知
  3. MariaDB数据库日志
  4. c语言中闰年 日期 天数 统计出在某个特定的年份中,出现了多少次既是13号又是星期五的情形
  5. vscode html 格式化_详解VSCode 格式化不符合预期的问题
  6. 分组框控件 1130
  7. php无限评论回复_php如何制作无限级评论功能?
  8. nodejs11安装教程(升级最新版本)
  9. oracle 运营维护_总结几个ORACLE数据库日常运维常用的命令(持续更新)
  10. JavaScript-包装类型
  11. #1024程序员节# cc2530 按键唤醒功耗模式PM3例程
  12. 一款很漂亮的一天只弹窗一次的公告
  13. 任正非:《一江春水向东流》
  14. 1-AO3402MOS管使用
  15. 金融知识小科普 - 宽基指数
  16. 从初级程序员到CEO,汤鹏与时代碰撞出的那些“火花”
  17. 史上最全vue优化方案
  18. 1094 谷歌的招聘
  19. 数学速算法_小学数学速算法,掌握了至少提高20分!
  20. python 实战之模仿开发QQ聊天软件(一)登录GUI设计

热门文章

  1. snownlp文本分词、情感分析、文本相似度与摘要生成
  2. selenium配置无界面chrome浏览器
  3. java exec source报错_Mac 下maven路径报错的坑
  4. python创建person类用printinfo方法_Python学习期刊Day11类和对象(2),日记,与,下
  5. java集合课程,I学霸官方免费课程三十三:Java集合框架之Map集合
  6. php提交表单并发送邮件,php提交表单发送邮件的方法
  7. pythonの连接MySQL数据库
  8. NAS 百科 —— http://baike.baidu.com/item/NAS%E7%BD%91%E7%BB%9C%E5%AD%98%E5%82%A8
  9. 参数数组(params)的用法
  10. windows下python SSH-Client模块paramiko的安装与修改