Qt之第三方库‌QXlsx使用(三)

Qt开发 系列文章 - QXlsx(三)


目录

前言

一、Qt开源库

二、QXlsx

1.QXlsx介绍

2.QXlsx下载

3.QXlsx移植

4.修改项目文件.pro

三、使用技巧

1.添加头文件

2.写入数据

3.读出数据

总结


前言

Qt第三方控件库是指非Qt官方提供的、用于扩展Qt应用程序功能的控件集合。这些控件库可以提供额外的用户界面元素、功能组件或者优化现有Qt控件的性能和外观。一些常用的Qt第三方控件库有QCustomPlot、QXlsx、QHotkey、QtSerialPort、QsLog等等很多,它们都是开源的、免费的,且基于Qt框架编写,今天本文主要讲解QXlsx第三方控件开源库。


一、Qt开源库

‌Qt开源库‌是指基于Qt框架的一系列开源库,这些库提供了丰富的功能,帮助开发者在Qt应用程序中实现各种功能需求。Qt是一个跨平台的C++图形用户界面应用程序开发框架,广泛用于开发GUI程序,也可用于开发非GUI程序,如控制台工具和服务器。

常用的Qt第三方控件开源库及特点和用途简要描述如下:

  1. ‌‌QXlsx是一个用于读写Microsoft Excel文件的库,使Qt应用程序能够处理Excel数据;

  2. QCustomPlot‌是一个绘制图表、曲线、统计图等的库,具有灵活的定制化和丰富的功能;
  3. QHotkey是一个简单易用的库,用于在Qt应用程序中注册全局快捷键;

  4. QtSerialPort是Qt官方提供的库,用于串口通信,支持跨平台使用;
  5. QsLog是一个轻量级的日志库,用于在Qt应用程序中记录和输出日志信息;

  6. ‌‌QJson‌是用于JSON数据解析和生成的库,方便处理JSON格式的数据;

  7. QwtPlot3D‌是绘制三维图形的库,支持曲面图、线框图、散点图等。

二、QXlsx

先提供第三方开源库QXlsx库的下载网址:GitHub - QtExcel/QXlsx下载地址

1.QXlsx介绍

由于Qt无自带的库处理Excel文件,亦使用免费的开源第三方库QXlsx,它提供了一组简单易用的API,允许开发者读取、写入和修改Excel工作簿(.xlsx文件格式),并且完全独立于Excel应用程序本身,不需要安装Microsoft Excel即可操作Excel文件‌。

2.QXlsx下载

打开上面的QXlsx下载地址,如下所示。在Code处点击Download ZIP,下载压缩文件;也可以使用git clone https://github.com/QtExcel/QXlsx.git 将项目下载到本地.

下载完后,并解压该文件,如下所示。

打开该文件夹,可以看到里面有若干文件夹,主要时一些QXlsx的使用例程,和github的配置文件,我们主要关心QXlsx的源文件,在图中QXlsx文件夹里面,将该文件夹复制到你的Qt工程项目中,是此行的目的。

3.QXlsx移植

将上面QXlsx文件夹复制到你的Qt工程项目路径下面,然后将该文件QXlsx添加到你的Qt项目中。

首先,将QXlsx复制到项目路径下面,如下所示。

然后,打开QXlsx文件夹,删除cmake文件夹、CMakeLists.txt、QXlsx.pro文件,保留如下文件。

4.修改项目文件.pro

打开你的Qt项目,点击打开你的pro文件,在其中添加如下配置信息,代码示例:

QXLSX_PARENTPATH=$$PWD/QXlsx/
QXLSX_HEADERPATH=$$PWD/QXlsx/header/
QXLSX_SOURCEPATH=$$PWD/QXlsx/source/
include($$PWD/QXlsx/QXlsx.pri)

添加完成后,会自动将QXlxs文件夹显示在项目中。

至此,已经将QXlxs在Qt中运用的开发环境已经搭建完毕,可以在Qt项目中使用QXlsx处理execle文件了。下面在讲解一些QXlxs的使用技巧,也可以参考下官方示例上的使用方式。

三、使用技巧

1.添加头文件

进行对数据写入/读取操作时,别忘了,在文件上方添加QXlxs头文件,如下所示:

#include "xlsxdocument.h"

2.写入数据

在UI界面上设置按钮,名称写入数据,点击可实现,创建一个Execl文件,向其写入数据数据,示意图:

代码示例:

void MainWindow::on_pushButton_clicked()
{
    QXlsx::Document xlsx;
    xlsx.write("A1", "时间(ms)");
    xlsx.write("B1", "帧序号");
    xlsx.write("C1", "气压(kPa)");
    xlsx.write("D1", "倾角(°)");
    xlsx.write("E1", "温度(℃)");
    xlsx.write("F1", "速度(m/s)");

    double d = 0.111111;
    for (int i=2; i<100; i++) {
        xlsx.write(i, 1, 100);
        xlsx.write(i, 2, 100);
        xlsx.write(i, 3, QString::number(d, 'f', 3));
        xlsx.write(i, 4, QString::number(d, 'f', 3));
        xlsx.write(i, 5, QString::number(d, 'f', 3));
        xlsx.write(i, 6, QString::number(d, 'f', 3));
    }
    QString saveFilePath = qApp->applicationDirPath() + "/savefile.xlsx";
    xlsx.saveAs(saveFilePath);
}

3.读出数据

在UI界面上设置按钮,名称读取数据,点击可实现,读取一个Execl文件,将其数据存入QStringList变量中,示意图:

代码如下(示例):

void MainWindow::on_pushButton_2_clicked()
{
    QString sourcFilePath = QFileDialog::getOpenFileName(nullptr,
              "请选择待处理的数据",qApp->applicationDirPath()+"/","*.xlsx;;all(*)");
    if(sourcFilePath.isEmpty()){
        QMessageBox mesg;
        mesg.critical(this,tr("Error"),tr("打开文件路径发生错误!"));
        return;
    }

    QXlsx::Document xlsx(sourcFilePath);
    QXlsx::Worksheet *workSheet = xlsx.currentWorksheet();
    int xlsxrows = workSheet->dimension().rowCount();//读取文件行数
    int xlsxcloums = workSheet->dimension().columnCount();//读取文件列数
    QStringList msgs;
    for (int i=1;i<=xlsxrows;i++){
        for (int j=1;j<=xlsxcloums;j++){
            msgs.append(workSheet->cellAt(i, j)->value().toString());
        }
    }
}

总结

QXlsx库里面还有许多功能,更为详细可参考官方给出的示例工程,在上述讲解中,你下载的文件包中。

博文中相应的工程代码Qt-Case.zip 利用Qt开发软件进行编的例程,为博文提供案例-CSDN文库。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Codeforces Round 992 (Div. 2)

传送门&#xff1a;Dashboard - Codeforces Round 992 (Div. 2) - Codeforces A. Game of Division 思路&#xff1a;模拟 AC代码&#xff1a;Submission #295676347 - Codeforces B. Paint a Strip 思路&#xff1a;数学 贪心 放置的位置一定是 1 4 10 22 48 ....…

MySQL并发控制(二):锁

只改一行语句&#xff0c;为什么锁那么多 注1&#xff1a;MySQL后面的版本可能会改变加锁策略&#xff0c; 所以这个规则只限于截止到现在的最新版本&#xff0c; 即5.x系列 注2&#xff1a;因为间隙锁在可重复读隔离级别下才有效&#xff0c; 所以本篇文章接下来的描述&#…

ThinkPHP+Layui开发的ERP管理系统

ERP采购生产销售系统&#xff0c;一款基于ThinkPHPLayui开发的ERP管理系统&#xff0c;帮助中小企业实现ERP管理规范化&#xff0c;此系统能为你解决五大方面的经营问题&#xff1a;1.采购管理 2.销售管理 3.仓库管理 4.资金管理 5.生产管理&#xff0c;适用于&#xff1a;服装…

vue的初步使用

一. vue的初步使用 1.引入相关依赖 //<!-- 引入一个vue文件 --><script src"https://cdn.jsdelivr.net/npm/vue2.7.16/dist/vue.js"></script>2. 给出相应的数据 <!DOCTYPE html> <html lang"en"> <head><meta ch…

计算机网络-Wireshark探索ARP

使用工具 Wiresharkarp: To inspect and clear the cache used by the ARP protocol on your computer.curl(MacOS)ifconfig(MacOS or Linux): to inspect the state of your computer’s network interface.route/netstat: To inspect the routes used by your computer.Brows…

开发一套SDK 第一弹

自动安装依赖包 添加条件使能 #ex: filetypesh bash_ls 识别 达到预期,多个硬件环境 等待文件文件系统挂在完成 或者创建 /sys/class/ 属性文件灌入配置操作 AI 提供的 netlink 调试方法,也是目前主流调用方法,socket yyds #include <linux/module.h> #include <linux…

Facebook 人工智能:重塑社交新未来

在数字化迅速发展的今天&#xff0c;人工智能(AI)已经深入了我们的生活&#xff0c;尤其是在社交媒体领域。Facebook作为全球最大的社交平台之一&#xff0c;正利用AI技术&#xff0c;革新其服务和用户体验&#xff0c;为用户打造社交互动的新未来。 首先&#xff0c;人工智能…

Plugin - 插件开发03_Spring Boot动态插件化与热加载

文章目录 Pre方案概览使用插件的好处流程CodePlugin 定义Plugin 实现Plugin 使用方动态加载插件类加载器注册与卸载插件配置文件启动类测试验证 小结 Pre 插件 - 通过SPI方式实现插件管理 插件 - 一份配置&#xff0c;离插件机制只有一步之遥 插件 - 插件机制触手可及 Plug…

从单体到微服务:如何借助 Spring Cloud 实现架构转型

一、Spring Cloud简介 Spring Cloud 是一套基于 Spring 框架的微服务架构解决方案&#xff0c;它提供了一系列的工具和组件&#xff0c;帮助开发者快速构建分布式系统&#xff0c;尤其是微服务架构。 Spring Cloud 提供了诸如服务发现、配置管理、负载均衡、断路器、消息总线…

Flink学习连载文章13--FlinkSQL高级部分

eventTime 测试数据如下&#xff1a; {"username":"zs","price":20,"event_time":"2023-07-17 10:10:10"} {"username":"zs","price":15,"event_time":"2023-07-17 10:10:3…

UnityShaderLab 实现程序化形状(一)

1.实现一个长宽可变的矩形&#xff1a; 代码&#xff1a; fixed4 frag (v2f i) : SV_Target{return saturate(length(saturate(abs(i.uv - 0.5)-0.13)))/0.03;} 2.实现一个半径可变的圆形&#xff1a; 代码&#xff1a; fixed4 frag (v2f i) : SV_Target{return (distance(a…

【C++】CUDA线程模型

文章目录 1. 线程模型概述2. 一维线程模型3. 多维线程模型3.1 多维线程模型概述3.2 多维线程模型定义3.3 多维线程模型中的索引 4. 网格和线程块的限制条件 1. 线程模型概述 在CUDA编程中&#xff0c;线程的组织形式是多维的&#xff0c;主要通过网格&#xff08;Grid&#xff…

【JAVA高级篇教学】第二篇:使用 Redisson 实现高效限流机制

在高并发系统中&#xff0c;限流是一项非常重要的技术手段&#xff0c;用于保护后端服务&#xff0c;防止因流量过大导致系统崩溃。本文将详细介绍如何使用 Redisson 提供的 RRateLimiter 实现分布式限流&#xff0c;以及其原理、使用场景和完整代码示例。 目录 一、什么是限流…

聊聊在应用层面实现内网穿透功能是否可行

前言 最近接手了供方开发的网关项目&#xff0c;交接文档里面有个内网穿透的功能&#xff0c;一下子就吸引的我的目光。实现这个内网穿透的背景是业务部门有些业务是部署在公网&#xff0c;这些公网的业务想访问内网的业务&#xff0c;但因为公网和内网没打通&#xff0c;导致…

TPC-H数据集使用说明

TPCH数据使用说明 表模式&#xff1a; TPCH官网链接&#xff1a;TPC-H Homepage 同学们可以自行下载TPCH-tools自行生成数据&#xff08;10GB&#xff09;&#xff0c;下面主要是以mysql为例说明TPC-H的使用方法。 供同学自行参考&#xff1a; windows &#xff1a;TPC-H测…

vue2+html2canvas+js PDF实现试卷导出和打印功能

1.首先安装 import html2canvas from html2canvas; import { jsPDF } from jspdf; 2.引入打印插件print.js import Print from "/assets/js/print"; Vue.use(Print) // 打印类属性、方法定义 /* eslint-disable */ const Print function (dom, options) {if (…

Simdroid-EC:液冷仿真新星,助力新能源汽车电机控制器高效散热

近年来&#xff0c;新能源电动车的销量呈现出快速增长的态势。据统计&#xff0c;2024 年1-10月中国新能源汽车销量达728万辆&#xff0c;同比增长37.8%。 电机控制器在新能源汽车中对于保障动力和安全性能扮演着至关重要的角色&#xff0c;其核心部件IGBT&#xff08;绝缘栅双…

静态路由与交换机配置实验

1.建立网络拓扑 添加2台计算机&#xff0c;标签名为PC0、PC1&#xff1b;添加2台二层交换机2960&#xff0c;标签名为S0、S1&#xff1b;添加2台路由器2811&#xff0c;标签名为R0、R1&#xff1b;交换机划分的VLAN及端口根据如下拓扑图&#xff0c;使用直通线、DCE串口线连接…

深度学习:MindSpore自动并行

随着模型规模的逐渐增大&#xff0c;需要的算力逐渐增强&#xff0c;但是算力需求增长速度远高于芯片算力增长速度。现在唯一的解决方案只有通过超大规模集群训练大模型。 大集群训练大模型的挑战 内存墙 200B参数量的模型&#xff0c;参数内存占用745GB内存&#xff0c;训练…

前端成长之路:HTML(2)

HTML中有两个非常重要的标签——表格和表单&#xff0c;在介绍之前需要先了解表格和表单的区别&#xff1a;表格是用于展示数据的&#xff1b;表单是用于提交数据的。本文主要介绍表格。 表格标签 表格主要是用于显示、展示数据的&#xff0c;并非是页面布局。它可以使本来难…