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

基于QT4的GPX文件编辑器开发

GPX文件是记录地理点的文件,本质是一种xml文件。GPX文件目前没有很好的编辑器,因此作者决定开发一款无需安装的绿色编辑器。

在QT4开发中,XML可以用DOM来实现,但其逻辑并不是很清晰。使用模型视图反而会更加可读。因此在开发中,使用model-view模式来实现数据读写。

1 需求

1 新建gpx文件

2 打开gpx文件

3 保存gpx文件

4 编辑gpx头

5 编辑gpx地理点,包括插入行,删除行,编辑字段

6 地理点可视化

2 表格视图开发流程

1 新建UI工程

2 引入QCustomPlot和TableView

3 提升部件,并在UI界面下设计功能菜单。为了让代码更好读,所有的控件都用UI生成。

菜单目前先实现三个最基本的功能,就是新建,打开,保存。

4 新建逻辑

新建面临两种情况:

  • 1当前未打开任何文件,直接新建
  • 2打开文件且已修改但未保存,需要先保存再新建

代码如下:

// 若当前为修改状态 询问是否保存if(windowTitle().contains(" *")){QMessageBox::StandardButton res;res = QMessageBox::question(this,"Note","Save changes?",QMessageBox::Save|QMessageBox::Discard|QMessageBox::Cancel,QMessageBox::Save);if(res==QMessageBox::Save)on_actionSave_triggered();else if(res==QMessageBox::Cancel)return;}// 指定新建文件名QString tempName = QFileDialog::getSaveFileName(this,tr("New file"),"", "*.gpx");if(tempName.isEmpty())return;// 刷新文件名和模型fileName = tempName;model->removeRows(0,model->rowCount(QModelIndex()),QModelIndex());// 新建文件QFile file(fileName);if(!file.open(QIODevice::WriteOnly))return;file.close();// 更新标题*标记setWindowTitle(winName+" - "+fileName.replace("/","\\")+" *");

如何判断是否打开了未保存的文件?主要靠标题栏的*号。如果有*号则调用保存的槽函数。

指定文件名时,如果放弃指定就直接返回。

5 打开逻辑

打开面临两个情况,1是未打开任何文件,2是打开的文件已修改未保存。和新建一样,需要对标题栏的*号进行判断。

判断后,就打开指定文件。打开文件涉及到文件的读取。可以先看下gpx文件结构。gpx本质上是一种xml文本文件。

<?xml>

 <gpx>

        <metadata>

        <wpt lat="xxx" lon="xxx">

                 <ele>xxx</ele>

                 <time>2022-07-10T04:12:29Z</time>

                  <name>xxx</name>

                  <cmt>2022-07-10 12:12:29pm</cmt>

                  <sym>Flag, Blue</sym>

        </wpt>

        ...若干个wpt

</gpx>

基于上述结构,可以

相关文章:

基于QT4的GPX文件编辑器开发

GPX文件是记录地理点的文件,本质是一种xml文件。GPX文件目前没有很好的编辑器,因此作者决定开发一款无需安装的绿色编辑器。 在QT4开发中,XML可以用DOM来实现,但其逻辑并不是很清晰。使用模型视图反而会更加可读。因此在开发中,使用model-view模式来实现数据读写。 1 需…...

树结构使用实例---实现数组和树结构的转换

文章目录 一、为什么要用树结构&#xff1f;二、使用步骤 1.引入相关json2.树结构的转换总结 一、为什么要用树结构&#xff1f; 本文将讲述一个实例&#xff0c;构造一棵树来实现数组和tree的转换&#xff0c;这在前端树结构中是经常遇到的 后端返回树结构方便管理&#xff…...

论文阅读_条件控制_ControlNet

name_en: Adding Conditional Control to Text-to-Image Diffusion Models name_ch: 向文本到图像的扩散模型添加条件控制 paper_addr: http://arxiv.org/abs/2302.05543 date_read: 2023-08-17 date_publish: 2023-02-10 tags: [‘图形图像’,‘大模型’,‘多模态’] author: …...

全链路数据湖开发治理解决方案2.0重磅升级,全面增强数据入湖、调度和治理能力

简介&#xff1a; 阿里云全链路数据湖开发治理解决方案能力持续升级&#xff0c;发布2.0版本。解决方案包含开源大数据平台E-MapReduce(EMR) &#xff0c; 一站式大数据数据开发治理平台DataWorks &#xff0c;数据湖构建DLF&#xff0c;对象存储OSS等核心产品。支持EMR新版数据…...

【算法题】2769. 找出最大的可达成数字

题目&#xff1a; 给你两个整数 num 和 t 。 如果整数 x 可以在执行下述操作不超过 t 次的情况下变为与 num 相等&#xff0c;则称其为 可达成数字 &#xff1a; 每次操作将 x 的值增加或减少 1 &#xff0c;同时可以选择将 num 的值增加或减少 1 。 返回所有可达成数字中的…...

023:vue中解决el-date-picker更改样式不生效问题

第023个 查看专栏目录: VUE ------ element UI 本文章目录 修改后的效果示例源代码&#xff08;共52行&#xff09;核心内容步骤&#xff1a;&#xff08;1&#xff09;更改样式&#xff08;2&#xff09;添加参数 专栏目标 在vue项目开发中&#xff0c;我们打算保持颜色的一致…...

爬虫借助代理会让网速快点吗?

亲爱的程序员朋友们&#xff0c;你曾经遇到过爬虫网速慢的情况吗&#xff1f;别着急&#xff01;今天我将和你一起探讨一下使用代理是否可以加速爬虫&#xff0c;让我们一起进入这个轻松又专业的知识分享。 一、原因和机制的解析 1.IP限制 某些网站为了保护资源和防止爬虫行…...

探索智能文字识别:技术、应用与发展前景

探索智能文字识别&#xff1a;技术、应用与发展前景 前言一张图全览大赛作品解读随心记你不对我对小结 智能文字识别体系化解读图像预处理文字定位和分割文字区域识别图像校正字体识别和匹配结果后处理小结 如何应对复杂场景下挑战复杂场景应对方法小结 人才时代对人才要求合合…...

STL——list用法

一、list介绍 1、list是可以在常数范围内在任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双向迭代。 2、list就是一个带头双向循环链表&#xff0c;list通常在任意位置进行插入、移除元素的执行效率更好。 3、list最大的缺陷是不支持任意位置的随机访问…...

Linux的基础指令

目录 1、ls指令 .和..意义 2、pwd指令 3、cd指令 ①cd ~ ②cd - 关于cd ..的用法 绝对路径和相对路径 4、touch指令 5、mkdir指令 tree指令 6、rmdir指令 7、rm指令 * 8、man指令 9、cp指令 nano&#xff1a; 10、mv指令 11、cat指令 12、more指令 13、less…...

深入浅出Pytorch函数——torch.nn.init.normal_

分类目录&#xff1a;《深入浅出Pytorch函数》总目录 相关文章&#xff1a; 深入浅出Pytorch函数——torch.nn.init.calculate_gain 深入浅出Pytorch函数——torch.nn.init.uniform_ 深入浅出Pytorch函数——torch.nn.init.normal_ 深入浅出Pytorch函数——torch.nn.init.c…...

Vue.js知识点学习的一点笔记

一、虚拟DOM 1、原生JS是命令式编程&#xff0c;当渲染在页面的数据发生一点点变化&#xff0c;需要整个重新渲染一编。vue.js渐进式框架有个虚拟DOM的概念&#xff0c;运用diff算法&#xff0c;比较新旧数据&#xff0c;相同的数据不变不重渲染&#xff0c;不同的部分新数据…...

Sui第四轮资助:16个团队瓜分

近日&#xff0c;Sui基金会公布了第四轮开发者资助名单&#xff0c;受助项目均是集中在DeFi、支付、基础设施、游戏、预言机等领域的Sui生态项目&#xff0c;他们是从2023年7月1日之前提交的申请中选出的。在此时间之后提交的任何项目目前正在审查中。 在前三轮资助中累积发放…...

ATC模型转换环境问题案例

ATC&#xff08;Ascend Tensor Compiler&#xff09;是异构计算架构CANN体系下的模型转换工具&#xff1a;它可以将开源框架的网络模型&#xff08;如TensorFlow等&#xff09;以及Ascend IR定义的单算子描述文件转换为昇腾AI处理器支持的离线模型&#xff1b;模型转换过程中&a…...

dart其他语法

dart其他语法 类型相关 空安全 不能将一个普通类型对象赋值为 null 避免 为空 报错&#xff1a;对 null 的使用语法进行限制&#xff08;str &#xff01; null&#xff09;对空安全的允诺 late 延迟初始化的时机 ! 在此时该可用变量一定不为空 void main() {String name zh…...

C++11并发与多线程笔记(7) 单例设计模式共享数据分析、解决,call_once

C11并发与多线程笔记&#xff08;7&#xff09; 单例设计模式共享数据分析、解决&#xff0c;call_once 1.设计模式2.单例设计模式&#xff1a;3.单例设计模式共享数据分析、解决4.std::call_once()&#xff1a; 1.设计模式 程序灵活&#xff0c;维护起来可能方便&#xff0c;…...

FANUC机器人加减速倍率指令ACC的使用方法说明

FANUC机器人加减速倍率指令ACC的使用方法说明 单位有一台FANUC机器人(型号:M-900iB 360kg),偶尔会在启动的瞬间会报SRVO-050碰撞检测报警,而事实上机器人并没有开始移动或和其他工件产生碰撞,一直查了很长时间,也没有查到具体的原因,也尝试过重新进行负载推算,但是偶尔…...

奥威BI数据可视化工具:360度呈现数据,告别枯燥表格

随着企业数据量的不断增加&#xff0c;如何有效地进行数据分析与决策变得越来越重要。奥威BI数据可视化工具作为一款强大的数据分析工具&#xff0c;在帮助企业深入挖掘数据价值方面具有显著优势。 奥威BI数据可视化工具是一款基于数据仓库技术的数据分析工具&#xff0c;具有…...

C# Linq源码分析之Take (三)

概要 本文在前两篇Take源码分析的基础上&#xff0c;着重分析Range参数中有倒数的情况&#xff0c;即分析TakeRangeFromEndIterator的源码实现。 源码及分析 TakeRangeFromEndIterator方法用于处理Range中的开始和结束索引存在倒数的情况。该方法位于Take.cs文件中。通过yie…...

Linux journalctl命令详解(journalctl指令)(systemd服务默认日志管理工具)

文章目录 Linux Journalctl命令详解1. Journalctl简介2. Journalctl基础使用3. 过滤日志条目4. 时间戳和日志轮转5. 高级应用6. journalctl --help指令文档英文中文 注意事项journal日志不会将程序输出的空行显示&#xff0c;日志会被压缩得满满当当。journal日志不会自动持久化…...

用户NPS提升2.8倍的秘密:Lovable SaaS的3层共鸣架构,含Figma可复用组件库(限时开源)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Lovable SaaS产品开发指南 打造真正“可爱”&#xff08;Lovable&#xff09;的SaaS产品&#xff0c;核心在于将技术实现与人类情感体验深度耦合——用户不仅愿意使用&#xff0c;更主动分享、期待更新…...

ARM AMUv1架构解析与性能监控实战

1. ARM AMUv1活动监视器架构解析活动监视器&#xff08;Activity Monitor Unit&#xff0c;简称AMU&#xff09;是ARM架构中用于性能监控的关键硬件组件。作为处理器微架构的一部分&#xff0c;AMU通过专用硬件计数器实现对处理器行为的精确测量。我第一次在Cortex-A76芯片上接…...

35岁技术人的“反脆弱”职业策略:越动荡越值钱——软件测试工程师的破局之道

当“质量守门人”遭遇年龄的Bug对于软件测试工程师而言&#xff0c;35岁仿佛是一道无形的自动化脚本&#xff0c;悄然运行在每个人的职业生涯中。它不报错&#xff0c;却实实在在地改变着系统环境。招聘平台上“35岁以下”的潜规则、手工测试岗位的加速萎缩、自动化与AI测试技术…...

字节跳动多举措重塑短剧行业:15亿扶持、分账透明,出海与收缩并行

恐慌的来源&#xff0c;以及字节的导向今年年初&#xff0c;“红果取消保底”消息在从业者圈子发酵&#xff0c;“短剧演员无戏可拍”话题登上微博热搜&#xff0c;阅读量破亿&#xff0c;行业恐慌蔓延。恐慌源于两方面&#xff1a;一是红果从2026年1月起收缩普惠保底&#xff…...

3大实战场景:PX4无人机视觉定位从零部署到工业级应用

3大实战场景&#xff1a;PX4无人机视觉定位从零部署到工业级应用 【免费下载链接】PX4-Autopilot PX4 Autopilot Software 项目地址: https://gitcode.com/gh_mirrors/px/PX4-Autopilot PX4-Autopilot作为开源无人机飞控的标杆&#xff0c;其视觉定位能力正在重塑自主飞…...

Nix与Helm结合:实现声明式Kubernetes部署的确定性构建

1. 项目概述&#xff1a;当 Helm 遇见 Nix&#xff0c;一种声明式的新思路如果你和我一样&#xff0c;长期在 Kubernetes 生态里折腾&#xff0c;肯定对 Helm 又爱又恨。爱的是它用模板和 Values 文件&#xff0c;把一堆零散的 Kubernetes 资源打包成一个可配置、可版本化的“应…...

如何快速实现OBS多平台直播:obs-multi-rtmp完全配置指南

如何快速实现OBS多平台直播&#xff1a;obs-multi-rtmp完全配置指南 【免费下载链接】obs-multi-rtmp OBS複数サイト同時配信プラグイン 项目地址: https://gitcode.com/gh_mirrors/ob/obs-multi-rtmp 你是否厌倦了每次直播都要在不同平台间反复切换设置&#xff1f;obs…...

PostgreSQL游标实战:大数据处理、分页优化与性能避坑指南

1. 项目概述&#xff1a;为什么我们需要关注PostgreSQL游标&#xff1f;在数据库应用开发中&#xff0c;尤其是处理海量数据时&#xff0c;我们常常会遇到一个经典难题&#xff1a;如何高效、安全地遍历一个包含数百万甚至上亿条记录的结果集&#xff1f;直接使用SELECT * FROM…...

电磁兼容(EMC)设计实战:从干扰源头到系统防护的完整指南

1. 电磁兼容&#xff08;EMC&#xff09;设计的核心逻辑 电磁兼容设计就像给电子设备打造一套"防干扰盔甲"。想象一下&#xff0c;你正在用手机通话时&#xff0c;突然听到收音机杂音——这就是典型的电磁干扰现象。EMC设计要解决两个核心问题&#xff1a;不让自家设…...

手机跑多模态也能快到飞起!面壁MiniCPM-V 4.6开源

大模型技术正快步从云端机房走入普通人的智能手机&#xff0c;让移动设备直接处理复杂的图文与视频任务成为现实。面壁智能最新开源的一款多模态模型&#xff0c;以极低的算力成本&#xff0c;超低的首Token延迟&#xff0c;成功打通当前三大主流手机操作系统。MiniCPM-V 4.6专…...