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

「Qt Widget中文示例指南」如何实现文档查看器?(一)

Qt 是目前最先进、最完整的跨平台C++开发工具。它不仅完全实现了一次编写,所有平台无差别运行,更提供了几乎所有开发过程中需要用到的工具。如今,Qt已被运用于超过70个行业、数千家企业,支持数百万设备及应用。

文档查看器是一个显示和打印JSON、文本和PDF文件的Widgets应用程序。Document Viewer(文档查看器)演示了如何使用带有静态和动态工具栏、菜单和操作的QMainWindow,此外它还演示了基于小部件的应用程序中的以下特性:

  • 使用QSettings查询和保存用户参数,并管理以前打开的文件历史记录。
  • 控制光标悬停在小部件上时的操作。
  • 创建动态加载的插件。

点击获取Qt Widget组件下载(Q技术交流:166830288)

「Qt Widget中文示例指南」如何实现文档查看器?

创建一个应用程序和主窗口

应用程序及其主窗口是在main.cpp中构造的,main()函数使用QCommandLineParser来处理命令行参数——help、version和一个可选的位置参数file。如果用户在启动应用程序时提供了文件的路径,则主窗口将打开该文件:

int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QCoreApplication::setOrganizationName("QtProject"_L1);
QCoreApplication::setApplicationName("DocumentViewer"_L1);
QCoreApplication::setApplicationVersion("1.0"_L1);QCommandLineParser parser;
parser.setApplicationDescription(QApplication::translate("main",
"A viewer for JSON, PDF and text files"));
parser.addHelpOption();
parser.addVersionOption();
parser.addPositionalArgument("File"_L1, QApplication::translate("main",
"JSON, PDF or text file to open"));
parser.process(app);const QStringList &positionalArguments = parser.positionalArguments();
const QString &fileName = (positionalArguments.count() > 0) ? positionalArguments.at(0)
: QString();MainWindow w;
w.show();
if (!fileName.isEmpty())
w.openFile(fileName);return app.exec();
}
MainWindow类

MainWindow类提供了一个带有菜单、操作和工具栏的应用程序屏幕,它可以打开一个文件,自动检测其内容类型。它还维护以前打开的文件列表,在启动时使用QSettings来存储和重新加载设置。MainWindow根据文件的内容类型为打开的文件创建一个合适的查看器,并提供打印文档的支持。

MainWindow的构造函数初始化Qt Designer中创建的用户界面,mainwindow.ui文件在左侧提供了一个QTabWidget,显示书签和缩略图,在右侧有一个QScrollArea,用于查看文件内容。

ViewerFactory类

ViewerFactory类管理已知文件类型的查看器,这些查看器是作为插件实现的。当ViewerFactory的实例被创建时,指向视图区域和主窗口的指针被传递给构造函数:

m_factory.reset(new ViewerFactory(ui->viewArea, this));

ViewerFactory在构建时加载所有可用的插件,它提供了一个公共API来查询加载的插件、它们的名称和支持的MIME类型:

using ViewerList = QList<AbstractViewer *>;
QStringList viewerNames(bool showDefault = false) const;
ViewerList viewers() const;
AbstractViewer *findViewer(const QString &viewerName) const;
AbstractViewer *defaultViewer() const;
QStringList supportedMimeTypes() const;

viewer()函数返回一个指向插件的指针,用于打开作为参数传递的QFile:

m_viewer = m_factory->viewer(file);

如果应用程序设置包含查看器的部分,则将其传递给查看器的虚拟restoreState()函数:

void MainWindow::restoreViewerSettings()
{
if (!m_viewer)
return;QSettings settings;
settings.beginGroup(settingsViewers);
QByteArray viewerSettings = settings.value(m_viewer->viewerName(), QByteArray()).toByteArray();
settings.endGroup();
if (!viewerSettings.isEmpty())
m_viewer->restoreState(viewerSettings);
}

然后将标准UI资产传递给查看器,并设置主滚动区域来显示查看器的显示小部件:

m_viewer->initViewer(ui->actionBack, ui->actionForward, ui->menuHelp->menuAction(), ui->tabWidget);
restoreViewerSettings();
ui->scrollArea->setWidget(m_viewer->widget());
return true;
}
Qt Widget组件推荐
  • QtitanRibbon - Ribbon UI组件:是一款遵循Microsoft Ribbon UI Paradigm for Qt技术的Ribbon UI组件,QtitanRibbon致力于为Windows、Linux和Mac OS X提供功能完整的Ribbon组件。
  • QtitanChart - Qt类图表组件:是一个C ++库,代表一组控件,这些控件使您可以快速地为应用程序提供漂亮而丰富的图表。
  • QtitanDataGrid - Qt网格组件:提供了一套完整的标准 QTableView 函数和传统组件无法实现的独特功能。使您能够将不同来源的各类数据加载到一个快速、灵活且功能强大的可编辑网格中,支持排序、分组、报告、创建带状列、拖放按钮和许多其他方便的功能。
  • QtitanDocking:允许您像 Visual Studio 一样为您的伟大应用程序配备可停靠面板和可停靠工具栏。黑色、白色、蓝色调色板完全支持 Visual Studio 2019 主题!

相关文章:

「Qt Widget中文示例指南」如何实现文档查看器?(一)

Qt 是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写&#xff0c;所有平台无差别运行&#xff0c;更提供了几乎所有开发过程中需要用到的工具。如今&#xff0c;Qt已被运用于超过70个行业、数千家企业&#xff0c;支持数百万设备及应用。 文档查看器是一个显…...

如何创建WordPress付款表单(简单方法)

您是否正在寻找一种简单的方法来创建付款功能WordPress表单&#xff1f; 小企业主通常需要创建一种简单的方法来在其网站上接受付款&#xff0c;而无需设置复杂的购物车。简单的付款表格使您可以轻松接受自定义付款金额、设置定期付款并收集自定义详细信息。 在本文中&#x…...

虹科方案 | 释放总线潜力:汽车总线离线模拟解决方案

来源&#xff1a;虹科汽车智能互联 虹科方案 | 释放总线潜力&#xff1a;汽车总线离线模拟解决方案 原文链接&#xff1a;https://mp.weixin.qq.com/s/KGv2ZOuQMLIXlOiivvY6aQ 欢迎关注虹科&#xff0c;为您提供最新资讯&#xff01; #汽车总线 #ECU #汽车网关 导读 传统的…...

欲速则不达,慢就是快!

引言 随着生活水平的提高&#xff0c;不少人的目标从原先的解决温饱转变为追求内心充实&#xff0c;但由于现在的时间过得越来越快以及其他外部因素&#xff0c;我们对很多东西的获取越来越没耐心&#xff0c;例如书店经常会看到《7天精通Java》、《3天掌握XXX》等等之类的书籍…...

ubuntu22.04@Jetson OpenCV安装

ubuntu22.04Jetson OpenCV安装 1. 源由2. 分析3. 证实3.1 jtop安装3.2 jtop指令3.3 GPU支持情况 4. 安装OpenCV4.1 修改内容4.2 Python2环境【不需要】4.3 ubuntu22.04环境4.4 国内/本地环境问题4.5 cudnn版本问题 5. 总结6. 参考资料 1. 源由 昨天用Jetson跑demo程序发现帧率…...

OpenGL学习——17.模型

前情提要&#xff1a;本文代码源自Github上的学习文档“LearnOpenGL”&#xff0c;我仅在源码的基础上加上中文注释。本文章不以该学习文档做任何商业盈利活动&#xff0c;一切著作权归原作者所有&#xff0c;本文仅供学习交流&#xff0c;如有侵权&#xff0c;请联系我删除。L…...

6.2 数据库

本节介绍Android的数据库存储方式--SQLite的使用方法&#xff0c;包括&#xff1a;SQLite用到了哪些SQL语法&#xff0c;如何使用数据库管理操纵SQLitem&#xff0c;如何使用数据库帮助器简化数据库操作&#xff0c;以及如何利用SQLite改进登录页面的记住密码功能。 6.2.1 SQ…...

计算机设计大赛 深度学习人体跌倒检测 -yolo 机器视觉 opencv python

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; **基于深度学习的人体跌倒检测算法研究与实现 ** 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f947;学长这里给一个题目综合评分(每项满…...

本地模拟发送、接收RabbitMQ数据

文章目录 前言一、相关文章二、相关代码1.模拟的 Channel 类2.接收消息3.模拟推送MQ数据前言 日常开发中,当线上RabbitMQ坏境还没准备好时,可在本地模拟发送、接收消息 一、相关文章 Docker安装RabbitMQ 【SpringCloud】整合RabbitMQ六大模式应用(入门到精通) Spring R…...

前端 webSocket 的使用

webSocket使用 注意要去监听websocket 对象事件&#xff0c;处理我们需要的数据 我是放在了最外层的index 内&#xff0c;监听编辑状态&#xff0c;去触发定义的方法。因为我这个项目是组件化开发&#xff0c;全部只有一个总编辑按钮&#xff0c;我只需监听是否触发了编辑即可…...

opencv图像处理(一)

一. OpenCV 简介 OpenCV 是一个跨平台计算机视觉库&#xff0c;可以运行在Linux、Windows、Android和Mac OS操作系统上。 应用领域 1、人机互动 2、物体识别 3、图像分割 4、人脸识别 5、动作识别 6、运动跟踪 7、机器人 8、运动分析 9、机器视觉 10、…...

消息队列-RabbitMQ:workQueues—工作队列、消息应答机制、RabbitMQ 持久化、不公平分发(能者多劳)

4、Work Queues Work Queues— 工作队列 (又称任务队列) 的主要思想是避免立即执行资源密集型任务&#xff0c;而不得不等待它完成。我们把任务封装为消息并将其发送到队列&#xff0c;在后台运行的工作进程将弹出任务并最终执行作业。当有多个工作线程时&#xff0c;这些工作…...

前端秘法基础式(HTML)(第二卷)

目录 一.表单标签 1.表单域 2.表单控件 2.1input标签 2.2label/select/textarea标签 2.3无语义标签 三.特殊字符 一.表单标签 用来完成与用户的交互,例如登录系统 1.表单域 <form>通过action属性,将用户填写的数据转交给服务器 2.表单控件 2.1input标签 type…...

PTA-统计英文字母和数字字符[2]

本题要求编写程序&#xff0c;输入N个字符&#xff0c;统计其中英文字母、数字字符和其他字符的个数。 输入格式: 输入在第一行中给出正整数N&#xff0c;第二行输入N个字符&#xff0c;最后一个回车表示输入结束&#xff0c;不算在内。 输出格式: 在一行内按照 letter 英…...

Elasticsearch:将 IT 智能和业务 KPI 与 AI 连接起来 - 房间里的大象

作者&#xff1a;Fermi Fang 大象寓言的智慧 在信息技术和商业领导力的交叉点&#xff0c;蒙眼人和大象的古老寓言提供了一个富有洞察力的类比。 这个故事起源于印度次大陆&#xff0c;讲述了六个蒙住眼睛的人第一次遇到大象的故事。 每个人触摸大象的不同部位 —— 侧面、象牙…...

基于芯驰 X9HP PTG4.1 在 yocto 中添加 Linux 应用

1.参考例程并添加应用 1.1 参考例程 &#xff08;1&#xff09;查看自带的串口测试例程 uart_test &#xff0c;查看 bb 文件怎么写的。 1.2 添加 printf-test 应用 &#xff08;1&#xff09;在 yocto/meta-semidrive/recipes-bsp/ 目录中 copy 自带例程 uart-test 改名为 …...

【微服务安全】OpenID Connect 简介:现代应用程序的身份验证

OpenID Connect (OIDC) 是一个建立在 OAuth 2.0 之上的开放身份验证协议。它简化了应用程序以一种标准化和可互操作的方式验证用户身份并获取其基本个人资料信息的方式。可以将其视为应用程序“知道你是谁”的一种安全方式&#xff0c;而无需你创建单独的帐户或透露你的密码。 …...

Linux系统中HTTP隧道的搭建与配置步骤:穿越网络的“魔法隧道”

在Linux系统中搭建HTTP隧道&#xff0c;就像是开启了一条穿越网络的“魔法隧道”。这条隧道能让你的数据在网络中自由穿梭&#xff0c;无论是远程办公还是数据同步&#xff0c;都能变得轻松自在。下面&#xff0c;就让我们一起探索如何搭建这条神奇的“魔法隧道”吧&#xff01…...

fastApi笔记04-查询参数和字符串校验

额外校验 使用Query可以对查询参数添加校验 from typing import Unionfrom fastapi import FastAPI, Queryapp FastAPI()app.get("/items/") async def read_items(q: Union[str, None] Query(defaultNone, max_length50)):results {"items": [{"…...

笔记 记录

前言 个人记录 官网模版 基于 vue2 示例图...

代购系统技术实现:如何高效采集 1688 和淘宝商品数据

# 代购系统技术实现&#xff1a;如何高效采集 1688 和淘宝商品数据在跨境电商和代购业务中&#xff0c;高效采集 1688 和淘宝商品数据是核心痛点。本文分享我们在 taocarts 代购系统中的技术实践。## 一、数据采集架构设计我们采用分布式爬虫架构&#xff0c;核心模块包括&…...

三层交换+单臂路由+ACL网络配置

一、拓扑与IP规划设备VLAN网关IP地址PC1/PC32192.168.2.254192.168.2.1/2PC23192.168.3.254192.168.3.1PC44192.168.4.254192.168.4.1PC55192.168.5.254192.168.5.1PC66192.168.6.254192.168.6.1二、交换机配置LSW1system-view vlan batch 2 3 4 5 6 interface GigabitEthernet…...

Anthropic Claude Code源代码意外泄露:npm打包失误暴露512,000行闭源代码

2026年3月31日&#xff0c;Anthropic公司一名员工在向npm公开注册账户发布AI编程工具Claude Code&#xff08;版本2.1.88&#xff09;时&#xff0c;意外捆绑了源映射&#xff08;source map&#xff09;文件&#xff0c;导致该闭源代理式编码工具的完整专有源代码完全暴露。 …...

Phi-4-mini-reasoning效果展示:国际奥赛风格数学题全自动分步求解演示

Phi-4-mini-reasoning效果展示&#xff1a;国际奥赛风格数学题全自动分步求解演示 1. 模型介绍 Phi-4-mini-reasoning是微软推出的3.8B参数轻量级开源模型&#xff0c;专为数学推理、逻辑推导和多步解题等强逻辑任务设计。这款模型主打"小参数、强推理、长上下文、低延迟…...

Pi0机器人控制实战:从模型下载到Web演示完整流程

Pi0机器人控制实战&#xff1a;从模型下载到Web演示完整流程 1. 项目概述与核心价值 Pi0是一个创新的视觉-语言-动作流模型&#xff0c;专为通用机器人控制设计。这个开源项目将深度学习与机器人技术相结合&#xff0c;通过自然语言指令和视觉输入来生成精确的机器人动作。项…...

AudioSeal Pixel Studio实操手册:音频指纹哈希值生成与区块链存证接口对接示例

AudioSeal Pixel Studio实操手册&#xff1a;音频指纹哈希值生成与区块链存证接口对接示例 1. 工具概述与核心价值 AudioSeal Pixel Studio是一款基于Meta开源的AudioSeal算法构建的专业音频水印工具。它能够在保持原始音频质量的前提下&#xff0c;为音频文件嵌入不可感知的…...

OpenClaw+千问3.5-9B智能翻译:多语言文档自动处理

OpenClaw千问3.5-9B智能翻译&#xff1a;多语言文档自动处理 1. 为什么需要本地化智能翻译 去年参与一个跨国开源项目时&#xff0c;我每天要处理英日韩三种语言的开发文档。传统翻译工具需要手动复制粘贴&#xff0c;遇到代码片段还会破坏格式。更麻烦的是技术术语的准确性—…...

如何在微信和QQ上使用EmojiPackage表情包:终极完整指南

如何在微信和QQ上使用EmojiPackage表情包&#xff1a;终极完整指南 【免费下载链接】EmojiPackage 表情包资源合集&#xff0c;张张都是经典 项目地址: https://gitcode.com/gh_mirrors/em/EmojiPackage EmojiPackage表情包资源合集是聊天社交中的神器&#xff0c;这个经…...

PyTorch 2.8镜像实战解析:RTX 4090D上Stable Video Diffusion推理提速实测

PyTorch 2.8镜像实战解析&#xff1a;RTX 4090D上Stable Video Diffusion推理提速实测 1. 镜像环境深度解析 1.1 硬件适配优化方案 这个PyTorch 2.8镜像针对RTX 4090D显卡进行了全方位优化&#xff0c;就像给赛车手量身定制了高性能装备。24GB显存的设计让大模型推理不再捉襟…...

3步解决视频转PPT难题:智能幻灯片提取工具全攻略

3步解决视频转PPT难题&#xff1a;智能幻灯片提取工具全攻略 【免费下载链接】extract-video-ppt extract the ppt in the video 项目地址: https://gitcode.com/gh_mirrors/ex/extract-video-ppt 在数字化学习与办公场景中&#xff0c;从视频中提取PPT内容一直是效率瓶…...