详解Qt pdf 之QPdfSelection 选择文本类
文章目录
- QPdfSelection 类详解
- 前言
- 详细说明
- 公共函数说明
- 1. 构造函数
- 2. `text`
- 3. `boundingRect`
- 4. `isEmpty`
- 5. `startPage`
- 6. `endPage`
- 使用场景
- 示例代码
- 代码说明
- 总结
QPdfSelection 类详解
前言
QPdfSelection
是 Qt PDF 模块中的一个类,用于表示在 PDF 文档中被选中的文本区域。它提供了访问选中内容、获取选区的几何信息(如矩形边界)和与 QPdfDocument
交互的能力。QPdfSelection
主要用于支持 PDF 文档中的文本选择、复制、高亮显示和其他交互功能。
本文将详细介绍 QPdfSelection
的功能、用途,以及如何使用它实现 PDF 文档的文本选择和相关操作,最后通过示例代码总结其应用。
详细说明
QPdfSelection
类代表在 PDF 文档中用户选择的文本区域。它提供了访问选区文本、选区位置、选区几何信息等功能。QPdfSelection
主要用于实现文本选择、复制、查找和高亮显示等功能,结合 QPdfDocument
使用时,可以方便地处理 PDF 文档中的交互式文本操作。
QPdfSelection
与 QPdfDocument
密切配合,通常用于开发带有文本选择功能的 PDF 查看器、文本搜索工具等应用。
公共函数说明
以下是 QPdfSelection
的主要成员函数及其详细说明。
1. 构造函数
QPdfSelection()
- 作用:构造一个空的
QPdfSelection
对象。 - 参数:无。
- 返回值:无。
示例代码:
QPdfSelection selection;
2. text
QString text() const
- 作用:获取选中区域的文本内容。
- 参数:无。
- 返回值:返回一个
QString
,表示选中的文本内容。
示例代码:
QString selectedText = selection.text();
qDebug() << "Selected text:" << selectedText;
3. boundingRect
QRectF boundingRect() const
- 作用:获取选中区域的矩形边界。
- 参数:无。
- 返回值:返回一个
QRectF
类型,表示选区的矩形区域。
示例代码:
QRectF selectionRect = selection.boundingRect();
qDebug() << "Selection bounding box:" << selectionRect;
4. isEmpty
bool isEmpty() const
- 作用:检查选区是否为空。
- 参数:无。
- 返回值:返回
true
表示选区为空,false
表示有选中的文本。
示例代码:
if (selection.isEmpty()) {qDebug() << "No text selected.";
} else {qDebug() << "Text selected.";
}
5. startPage
int startPage() const
- 作用:返回选区开始的页面号。
- 参数:无。
- 返回值:返回一个整数,表示选区起始的页面编号(从 0 开始)。
示例代码:
int startPage = selection.startPage();
qDebug() << "Selection starts on page:" << startPage;
6. endPage
int endPage() const
- 作用:返回选区结束的页面号。
- 参数:无。
- 返回值:返回一个整数,表示选区结束的页面编号(从 0 开始)。
示例代码:
int endPage = selection.endPage();
qDebug() << "Selection ends on page:" << endPage;
使用场景
QPdfSelection
主要用于以下几种场景:
- 文本选择:用户可以在 PDF 文档中选择文本,
QPdfSelection
用于表示和管理这些选中的文本区域。 - 文本复制:通过
QPdfSelection
获取选中的文本,用户可以实现复制功能。 - 高亮显示选区:可以通过选区的矩形边界来高亮显示被选中的文本区域,提升用户体验。
- 交互式文本查找:结合
QPdfSearchModel
和QPdfSelection
,可以实现交互式文本查找和定位功能。
示例代码
以下示例展示了如何使用 QPdfSelection
类获取选中的文本及其相关信息。
#include <QCoreApplication>
#include <QPdfDocument>
#include <QPdfSelection>
#include <QDebug>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);// 加载 PDF 文档QPdfDocument pdfDoc;if (pdfDoc.load("/path/to/document.pdf") != QPdfDocument::Status::Ready) {qWarning() << "Failed to load PDF document";return -1;}// 假设我们从用户交互中得到了一个 QPdfSelection 对象// 示例: 从第一页的 (50, 50) 到 (200, 100) 位置选择文本QPdfSelection selection = pdfDoc.selectionAt(0, QRectF(50, 50, 200, 100));// 获取并输出选中的文本QString selectedText = selection.text();qDebug() << "Selected text:" << selectedText;// 输出选区的矩形边界QRectF selectionRect = selection.boundingRect();qDebug() << "Selection bounding box:" << selectionRect;// 判断选区是否为空if (selection.isEmpty()) {qDebug() << "No text selected.";} else {qDebug() << "Text selected.";}// 输出选区的起始和结束页面int startPage = selection.startPage();int endPage = selection.endPage();qDebug() << "Selection starts on page:" << startPage;qDebug() << "Selection ends on page:" << endPage;return a.exec();
}
代码说明
- 加载 PDF 文档:使用
QPdfDocument
加载 PDF 文件。 - 选择文本:通过
selectionAt()
方法指定选区的起始位置和大小,获取QPdfSelection
对象。 - 获取选区信息:
- 使用
text()
获取选中的文本。 - 使用
boundingRect()
获取选区的矩形边界。 - 使用
isEmpty()
判断选区是否为空。 - 使用
startPage()
和endPage()
获取选区的起始页和结束页。
- 使用
- 输出选区信息:将选区的文本、边界、页面信息输出到调试日志。
总结
QPdfSelection
是一个非常有用的类,适用于需要在 PDF 文档中实现文本选择和交互的场景。通过它,开发者可以轻松地获取用户选择的文本内容和选区的几何信息,并结合其他类(如 QPdfDocument
、QPdfSearchModel
等)实现复杂的文本操作功能。无论是用于 PDF 查看器中的文本选择,还是用于搜索和复制操作,QPdfSelection
都提供了高效的支持。
关键功能包括:
- 文本选择 (
text
)。 - 获取选区的几何信息 (
boundingRect
)。 - 检查选区是否为空 (
isEmpty
)。 - 获取选区的起始和结束页面 (
startPage
、endPage
)。
通过本文的示例代码,开发者可以快速掌握 QPdfSelection
的基本用法,并将其应用于实际的 PDF 文档操作中。
相关文章:
详解Qt pdf 之QPdfSelection 选择文本类
文章目录 QPdfSelection 类详解前言 详细说明公共函数说明1. 构造函数2. text3. boundingRect4. isEmpty5. startPage6. endPage 使用场景示例代码代码说明总结 QPdfSelection 类详解 前言 QPdfSelection 是 Qt PDF 模块中的一个类,用于表示在 PDF 文档中被选中的…...
docker中redis查看key、删除key
查看docker启动的进程 docker ps这个命令会列出所有正在运行的容器,包括容器的 ID、镜像名称、创建时间、状态、端口映射和名称 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1a2b3c4d5e6…...
【MySQL — 数据库基础】MySQL的安装与配置 & 数据库简单介绍
数据库基础 本节目标 掌握关系型数据库,数据库的作用掌握在Windows和Linux系统下安装MySQL数据库了解客户端工具的基本使用和SQL分类了解MySQL架构和存储引擎 1. 数据库的安装与配置 1.1 确认MYSQL版本 处理无法在 cmd 中使用 mysql 命令的情况&a…...
ehr系统建设方案,人力资源功能模块主要分为哪些,hrm平台实际案例源码,springboot人力资源系统,vue,JAVA语言hr系统(源码)
eHR人力资源管理系统:功能强大的人力资源管理工具 随着企业规模的不断扩大和业务需求的多样化,传统的人力资源管理模式已无法满足现代企业的需求。eHR人力资源管理系统作为一种先进的管理工具,能够为企业提供高效、准确、实时的人力资源管理。…...
【解决安全扫描漏洞】---- 检测到目标站点存在 JavaScript 框架库漏洞
1. 漏洞结果 JavaScript 框架或库是一组能轻松生成跨浏览器兼容的 JavaScript 代码的工具和函数。如果网站使用了存在漏洞的 JavaScript 框架或库,攻击者就可以利用此漏洞来劫持用户浏览器,进行挂马、XSS、Cookie劫持等攻击。 1.1 漏洞扫描截图 1.2 具体…...
flink学习(12)——checkPoint
如何设置checkPoint package com.bigdata.day06;/** * 1、需要三句话 * 2、设置完checkPoint后若程序出现异常,会一直重启 * 3、此时是自动进行checkPoint保存 * 4、注意:此时如果有checkpoint ,是不会出现异常的,需要将checkpoint的代码关…...
【iOS】《Effective Objective-C 2.0》阅读笔记(一)
文章目录 前言了解OC语言的起源在类的头文件中尽量少引入其他头文件多用字面量语法,少用与之等价的方法字面量数值字面量数组字面量字典 多用类型常量,少用#define预处理指令用枚举法表示状态、选项、状态码 总结 前言 最近开始阅读一些iOS开发的相关书籍…...
LVS 负载均衡面试题及参考答案
目录 什么是 LVS 负载均衡?它的主要作用是什么? 为什么要使用 LVS 进行负载均衡? LVS 有哪些组成部分? 简述 LVS 的架构。 LVS 中有哪两种典型的架构?请简要说明它们的特点。 LVS 的工作原理是怎样的?简述 LVS 的工作原理。 解释 LVS 中的虚拟服务器(VS)概念。 …...
北京科博会 天云数据CEO雷涛谈人工智能技术服务数字资产建设
7月13日,第二十六届中国北京国际科技产业博览会(简称北京科博会)在国家会议中心开幕。本届科博会年度主题为“实施创新驱动发展战略 增强高质量发展动能”。会上,天云数据CEO雷涛发表《人工智能技术服务数字资产建设》主题演讲。 近期非常引人注目的事件…...
【Python运维】容器管理新手入门:使用Python的docker-py库实现Docker容器管理与监控
《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 随着容器技术的广泛应用,Docker已经成为开发和运维中的标准工具之一。使用Python语言管理Docker容器,不仅可以自动化繁琐的容器操作,还能…...
小程序解决大问题-物流系统磁盘爆满问题处理
晚上七点,煤矿调运的物流调度系统突然磁盘报名导致服务崩溃。系统用的是微服务,没有详细操作说明,也不敢动,运煤车辆排起了长队,只能联系厂家处理。好在经过30多分钟的处理,服务终于启动,系统运…...
计算机网络基础篇
TCP/IP网络模型 TCP/IP网络模型的作用就是给数据包进行层层封装,帮助数据包能够正确的找到对应的设备接受数据。 一个URL所经历的全部过程 URL所经历的全部过程: HTTP -> DNS ->协议栈-TCP->IP->MAC->网卡->交换机->路由器->服…...
32 从前序与中序遍历序列构造二叉树
32 从前序与中序遍历序列构造二叉树 32.1 从前序与中序遍历序列构造二叉树解决方案 class Solution { public:TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {return buildTreeHelper(preorder, inorder, 0, 0, inorder.size() - 1)…...
D82【python 接口自动化学习】- pytest基础用法
day82 pytest初体验 学习日期:20241128 学习目标:pytest基础用法 -- pytest初体验 学习笔记: 文件命名规范 py测试文件必须以test_开头(或_test结尾)测试方法必须以test开头测试类必须以Test开头,并且…...
在开发环境中,前端(手机端),后端(电脑端),那么应该如何设置iisExpress
首先,要想手机端应用能成功请求后端,两个设备至少需在同一个局域网内,且IP地址互通; 因为ajax是http(s)://IP地址端口号的方式请求,但是iisExpress默认是localhost如何解决,并没有IP地址,所以手…...
磁盘/系统空间占满导致黑屏死机无法开机的解决办法
文章目录 起因具体操作1.重启虚拟机,一直按CtrlShitf进入GRUP界面2.选“Ubuntu高级选项”并回车选择第二个,recovery mode![请添加图片描述](https://i-blog.csdnimg.cn/direct/201f9784c203406d802d24b39dc2d4a3.png)3.4.命令查看磁盘情况5.查找和删除文…...
使用zabbix监控k8s
一、 参考文献 小阿轩yx-案例:Zabbix监控kubernetes云原生环境 手把手教你实现zabbix对Kubernetes的监控 二、部署经验 关于zabbix监控k8s,总体来说是分为两块内容,一是在k8s集群部署zabbix-agent和zabbix- proxy。二是在zabbix进行配置。…...
MacOS安装MySQL数据库和Java环境以及Navicat
安装MySQL 去官网下载:MySQL 下载好后安装,在设置里往下滑,出现了这样,就代表安装成功了 接下来配置环境: 首先在我们的设备上找到终端并打开,输入 vim ~/.bash_profile(注意vim后面的空格),输入完成后点击…...
算法的复杂度
1.数据结构前言 下面的概念有的比较难理解,做个了结就行。 1.1数据结构的起源 在现实生活中我们更多地并不是解决数值计算的问题,而是 需要一些更科学的手段如(表,数,图等数据结构),才能更好…...
Linux命令进阶·如何切换root以及回退、sudo命令、用户/用户组管理,以及解决创建用户不显示问题和Ubuntu不显示用户名只显示“$“符号问题
目录 1. root用户(超级管理员) 1.1 用于账户切换的系统命令——su 1.2 退回上一个用户命令——exit 1.3 普通命令临时授权root身份执行——sudo 1.3.1 为普通用户配置sudo认证 2. 用户/用户组管理 2.1 用户组管理 2.2 用户管理 2.2.1 …...
若依项目源码阅读
源码阅读 前端代码分析 代码生成器生成的前端代码有两个,分别是course.js用于向后端发送ajax请求的接口代码,另一个是index.vue,用于在浏览器展示课程管理的视图组件。前端的代码是基于vue3elementplus。 template用于展示前端组件别的标签…...
JVM知识点学习-1
学习视频:狂神说Java 类加载器和双亲委派机制 类加载器 作用:加载Class文件 流程:这里的名字car1。。在栈里面,但是数据在堆里面 类加载器的几个类型: 虚拟机自带的类加载器;启动类(根Boot…...
TypeScript和JavaScript区别详解
文章目录 TypeScript和JavaScript区别详解一、引言二、类型系统1、静态类型检查TypeScript 示例JavaScript 示例 2、类型推断TypeScript 示例JavaScript 示例 三、面向对象编程TypeScript 示例JavaScript 示例 四、使用示例1. 环境搭建2. 创建TypeScript项目3. 安装TypeScript插…...
RVO动态避障技术方案介绍
原文:RVO动态避障技术方案介绍 - 哔哩哔哩 我们在开发游戏的时候经常会遇到这样的问题,当我们寻路的时候,其它人也在寻路,如何避免不从其它人的位置穿过。这个叫做动态避障,目前主流的解决方案就是RVO。本节我们来介绍…...
Vue进阶之单组件开发与组件通信
书接上篇,我们了解了如何快速创建一个脚手架,现在我们来学习如何基于vite创建属于自己的脚手架。在创建一个新的组件时,要在新建文件夹中打开终端创建一个基本的脚手架,可在脚手架中原有的文件中修改或在相应路径重新创建…...
OGRE 3D----5. OGRE和QML事件交互
在现代图形应用程序开发中,OGRE(Object-Oriented Graphics Rendering Engine)作为一个高性能的3D渲染引擎,广泛应用于游戏开发、虚拟现实和仿真等领域。而QML(Qt Modeling Language)则是Qt框架中的一种声明式语言,专注于设计用户界面。将OGRE与QML结合,可以充分利用OGR…...
ARIMA-神经网络混合模型在时间序列预测中的应用
ARIMA-神经网络混合模型在时间序列预测中的应用 1. 引言 1.1 研究背景与意义 时间序列预测在现代数据科学中扮演着越来越重要的角色。从金融市场的价格走势到工业生产的需求预测,从气象数据的天气预报到用电量的负荷预测,时间序列分析无处不在。传统的统计方法和现代深度学习…...
常见靶场的搭建
漏洞靶场 渗透测试(漏洞挖掘)切忌纸上谈兵,学习渗透测试(漏洞挖掘)知识的过程中,我们通常需要一个包含漏洞的测试环境来进行训练。而在非授权情况下,对于网站进行渗透测试攻击,是触及…...
[MacOS] [kubernetes] MacOS玩转虚拟化最佳实践
❓ 为什么不在MacOS本机安装呢?因为M系列芯片是Arm架构,与生产环境或者在本地调试时候,安装虚拟镜像和X86不同,造成不必要的切换环境的额外成本,所以在虚拟化的x86调试 步骤 & 详情 一: 安装OrbStack & 并配置…...
HarmonyOS:@Provide装饰器和@Consume装饰器:与后代组件双向同步
一、前言 Provide和Consume,应用于与后代组件的双向数据同步,应用于状态数据在多个层级之间传递的场景。不同于上文提到的父子组件之间通过命名参数机制传递,Provide和Consume摆脱参数传递机制的束缚,实现跨层级传递。 其中Provi…...
最新招总代理项目/无锡seo
XUnit入门 1.如果之前安装了xUnit.net Visual Studio Runner扩展包,通过"工具"菜单下的"扩展和更新"先将该扩展包卸载。 2.删除临时目录中的指定文件夹:%TEMP%\VisualStudioTestExplorerExtensions 安装Xunit: Xunit的安…...
网站建设捌金手指花总二/seo教程seo官网优化详细方法
http://blog.xiongzhijun.com/?cat48...
满版网页设计欣赏/关键词优化需要从哪些方面开展?
1.内存泄漏与内存溢出 内存溢出就是申请的内存,系统给不了你这么大的。你想买1000块的东西,但是你只有500块。如果入栈空间,栈是满的,那就是上溢。如果出栈空间,栈是空的,那就是下溢。 内存泄漏就是申请的…...
大学生服务性网站建设方案/网页点击量统计
最近开始学习UGUI,但发现相比NGUI,UGUI的资料比较少,很多东西只能慢慢摸索,我参考了一下Unity官方出的Unity Samples UI例子,尝试完成UI拖拽功能。 1.首先模拟一个简单的物品拖拽的菜单: 2.然后在准备拖拽的…...
如果做vr参观网站/seo软件工具箱
目录 一、快速理解 1、有限状态机(FSM) 2、有限状态机的设计 二、详细说明 1、有限状态机FSM 1)FSM概念 2)FSM的3特点 3)FSM的4要素 4)FSM状态转换图 2、FSM的设计和实现 1)设计思路…...
腾云公司做网站/成都多享网站建设公司
第一步:编写shell脚本vim check.sh脚本内容如下#!/bin/bash#这个脚本使用来统计CPU、磁盘、内存使用率、带宽的total0system0user0i0#带宽使用情况timedate "%Y-%m-%d %k:%M"daydate "%Y-%m-%d"minutedate "%k:%M"echo "*******…...