Qt中csv文件的导入与导出

2023-11-18

CSV

1.简介:

  全称:Comma Separated Values。

  是“逗号分隔值”的英文缩写,通常是纯文本文件,一般用wordWPS或是记事本打开。

2.规则:

(1)开头不留空,以行为单位。

(2)可含或不含列名,含列名则居文件第一行。

(3)一行数据部跨行,无空行。

(4)以半角逗号作分隔符,列为空也要表达其存在。

(5)列内容如存在半角逗号(即,)则用半角引号(即"")将该字段值包含起来。内容如存在半角逗号(即,)则用半角引号(即"")将该字段值包含起来。

(6)列内容如存在半角引号(即")则应替换成半角双引号("")转义,并用半角引号(即"")将该字段值包含起来。 

(7)文件读写时引号,逗号操作规则互逆。

(8)内码格式不限,可为 ASCII、Unicode 或者其他。

(9)不支持特殊字符

3.使用:(csv文件的导入导出)

先看下一个基本demo的ui:

(1)获取控件信息导入到csv文件中:

     void mainDialog::exportMsg()

     {

       //获取创建的csv文件名

       QString fileName = QFileDialog::getSaveFileName(this, tr("Excel file"), qApp->applicationDirPath (),

                                                   tr("Files (*.csv)"));

       if (fileName.isEmpty())

       return;

       //打开.csv文件

       QFile file(fileName);

       if(!file.open(QIODevice::WriteOnly | QIODevice::Text))

       {

           std::cerr << "Cannot open file for writing: "

                     << qPrintable(file.errorString()) << std::endl;

           return;

       }

       QTextStream out(&file);    

       //获取数据

       QString sName = ui->lineEdit->text();//姓名

       Int iAge = ui->spinBox->tvalue();//年龄

   

       out << tr("姓名:,") << sName << ",\n";

       out << tr("年龄:,") << iAge << ",\n";

       out << tr("1,") << tr("2,")<< tr("3,") << tr("4,") <<",\n";//表头          

       //获取表格内容

       int row = ui->tableWidget->rowCount();//表格总行数

       for(int i = 0; i < row; i ++)

       {

           for(int col = 0; col < 4; col++)

           {

               QString string = ui->tableWidget->item(i, col)->text();

               out << string << ",";// 写入文件

           }

           out << "\n";

       }

       QMessageBox::information(this, tr("导出数据成功"), tr("信息已保存在%1!").arg(fileName), tr("确定"));

       file.close();

}

这就是导出之后.csv文件中的内容:

(2)将csv文件中信息导入控件:

    void mainDialog::importMsg()

    {

        QString fileName = QFileDialog::getOpenFileName(this, tr("Excel file"), qApp->applicationDirPath (),

                                                   tr("Files (*.csv)"));

        QFile file(fileName);

        if(!file.open(QIODevice::ReadOnly | QIODevice::Text))

        {

           std::cerr << "Cannot open file for reading: "

                     << qPrintable(file.errorString()) << std::endl;

           return;

        }

        QStringList list;

        list.clear();

        QTextStream in(&file);

        int i =0;

        while(!in.atEnd())

        {

            QString fileLine = in.readLine();

            list = fileLine.split(",", QString::SkipEmptyParts);

            //姓名

            if(i == 0) ui->lineEdit->setText(list.at(1));

            //年龄

            if(i == 1) ui->spinBox->setValue(list.at(1));

            //表头

            if(i == 2) ui->tableWidget->setHorizontalHeaderLabels(QStringList() << list.at(0) << list.at(1)

                                                      << list.at(2) << list.at(3);       

            //表内容

            if(i == 3)

            {

                for(int a = 0; a < 4; a++)

                {

                    ui->tableWidget->setItem(0, a, new QTableWidgetItem(list.at(a)));

                }

            }

            if(i > 3)

            {

                for(int b = 0; b < 4; b++)

                {

                    ui->tableWidget->setRowCount(i-2);//设置添加一行

                    ui->tableWidget->setItem(i-3, b, new QTableWidgetItem(list.at(b)));

                }

            }

            i++;

        }

        file.close();

    }

好了,完成啦。。。
 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt中csv文件的导入与导出 的相关文章

  • QT“找不到 Qt 平台插件“xcb””

    我出于学术原因安装了QT everywhere 5 15开源版 但无法运行程序 首先 我编译了必要的源文件make并安装了QT Creator 然后我选择qmake来运行其中的程序 当我尝试运行示例程序时 遇到以下错误 qt qpa plu
  • 如何找到 QDockWidget 标题栏的高度?

    我正在尝试找到 a 的高度QDockWidget标题栏 以便对自定义布局进行一些智能调整大小 但标题栏不是单独的小部件 它内置于停靠小部件的私有布局中 并且没有成员可以访问它 还有其他方法可以找到它的高度吗 是的 您可以使用以下命令找到标题
  • Mac OS X 文件关联有效,但文件图标未更改

    我使用 Qt 5 3 2 开发了一个 Mac 应用程序 该应用程序处理具有特定扩展名的文件 比方说 xyz 我创建了一个名为 XYZ icns 的图标文件 并将其添加到我的应用程序包资源文件夹中 MyApp app Contents Res
  • Qt 信号槽,新符号中的转换类型[重复]

    这个问题在这里已经有答案了 鉴于以下两个 connect ui gt comboBox SIGNAL activated QString ps SLOT requestPlotsAvailable QString connect ui gt
  • Qt + win32 + mingw 上的原生 Windows API 链接问题

    我正在尝试使用 mingw 工具集将本机 Windows API 与 Qt 结合使用 部分功能存在链接问题 会发生什么 这是 mingw 名称修改的错误吗 ifdef Q WS WIN HWND hwnd QWidget winId HDC
  • 在哪里可以找到 Qt 的 dll 的 pdb 文件?

    我正在调试 Qt 应用程序 在哪里可以找到 Qt 的调试 dll 我在windows上使用的是vs2010 它说它需要 Qt 中的许多 dll 的 pdb 文件 从 Qt 5 9 开始 与 Windows 发行版相对应的 PDB 可作为单独
  • QToolBar 的菜单延迟

    我通过制作 QAction 并向其添加 QMenu 在 QToolBar 上有一个菜单 如何消除单击图标时出现菜单之前的延迟 QToolBar myToolBar new QToolBar this QAction myAction new
  • Windows 消息循环而不是 QApplication::exec() / QApplication::processEvents()

    我是否想念任何一个Qt如果我替换功能QApplication exec 使用标准 Windows 消息循环实现 这应该可以澄清我的意思 运行事件处理的常用 Qt 方式 int main int argc char argv QApplica
  • 如何将图标放置到 QLineEdit 上?

    stackoverflow com 网站的右上角有一个带有放大镜头的搜索字段和一个灰色的 搜索 关键字 我想知道是否有可能实现相同的外观QLineEdit 如果是这样那怎么办 QLineEdit lineEdit new QLineEdit
  • qt项目如何设置安装路径

    我正在寻找与 qmake configure prefix 等效的内容 基本上 我想覆盖默认的安装 部署目录 这是如何用命令行 qmake 指定的 我还使用 QtCreator 构建了很多 gui 项目 并且我想知道如何在 QtCreato
  • 为什么下面的重叠比较总是评估为 true

    我不明白为什么以下代码有警告 指出重叠比较始终评估为真 接下来的语句永远不会被执行 QVariant MainModel data const QModelIndex index int role const if index isVali
  • 仅将非模态 QDialog 窗口放置在我的应用程序顶部,而不是所有应用程序顶部

    我有一个 QDialog 窗口 它应该始终位于我的应用程序顶部 它不是模态的 用户可以随时与对话框和主应用程序进行交互 使用窗口保持在顶部提示在某种程度上实现了这一点 但是 该对话框仍然位于所有其他正在运行的应用程序 例如记事本 chrom
  • Qt程序部署到多平台,如何?

    我是 Qt 编程新手 我想开发一个程序 我想在 Windows Linux ubuntu 和 Mac 上运行 听说Qt支持多平台应用程序开发 但我的问题是 在我部署或编译后 任何 Qt 库都需要在 Ubuntu 中运行这个应用程序吗 如果您
  • 如何在 C++ 运行时更改 QML 对象的属性?

    我想在运行时更改 QML 对象的文本 我尝试如下 但文本仍然为空 这是后端类 class BackEnd public QObject Q OBJECT Q PROPERTY QString userFieldText READ userF
  • 程序意外完成 - QT Creator

    我正在尝试使用 QT Creator 使用 QT 框架开发 GUI 控制台应用程序 我使用的是Windows XP 我安装了QT 4 8 3和mingw 两者均已安装 没有任何错误 然后我安装了QT Creator QT 版本 路径中的 Q
  • QDesktopServices::openUrl 在资源管理器中选择指定文件

    在大多数编码程序中 您可以右键单击该项目 然后单击 在资源管理器中显示 它会在资源管理器中显示选定项目的文件 在 Qt 中使用 QDesktopServices 如何做到这一点 或在 QT 中执行此操作的任何方式 您可以使用此方法在 Win
  • QtCreator 调试暂停停在代码而不是汇编处

    如何配置 QtCreator 以便在调试并按下暂停时它会显示当前正在处理的代码 现在显示汇编 无法在任何地方找到有关此问题的答案 我使用的是 Windows 7 我在 Ubuntu 16 04 中使用 Qt Creator 4 2 2 时遇
  • 如何在带有预编译头的项目中使用google protobuf

    我有一个包含多个项目的解决方案 我的项目 但不是全部 使用预编译头 我决定使用 protobuf 但遇到了一个问题 在 protoc exe 从 proto 生成 pb h 后 我尝试包含标头并收到错误 预编译标头未包含在 pb h 中 我
  • 禁用 QML Slider 的鼠标滚轮

    我希望能够滚动Flickable使用鼠标滚轮 或触摸板上的两根手指 不改变Sliders它可能包含 示例代码及结果应用 import QtQuick 2 7 import QtQuick Window 2 2 import QtQuick
  • QGraphicsScene::clear 不会改变 sceneRect

    我有一个 QGraphicsScene 场景 和 QGraphicsView graphicsView 我有一个画图的方法 当我需要重绘所有图形时 我调用这个方法 一切都好 但我意识到 scene gt clear 不会改变 sceneRe

随机推荐

  • Spring boot 整合 log4j2日志、程序异常,发送邮件通知

    官方文档 https logging apache org log4j 2 x 1 Maven修改如下
  • html 元素平滑滚动到某一位置

    在网上查了大半天 有人用高度算 然后setTimeout的 那个观感真的是差到家了 还有人说用 js动画库的 其实很简单 直接用window scrollTo 这个方法就完事了 回到顶部 window scrollTo top 0 beha
  • 【Java】5大排序算法总结(插入排序+希尔排序+选择排序+堆排序+冒泡排序)

    快速导航 1 稳定性 2 插入排序 3 希尔排序 4 选择排序 5 堆排序 6 冒泡排序 1 稳定性 两个相等的数据 如果经过排序后 排序算法能保证其相对位置不发生变化 则我们称该算法是具备稳定性的排序算法 图中排序后a仍然在b前面 此时这
  • Spring的两种代理方式:JDK动态代理和CGLIB动态代理

    代理模式 代理模式的英文叫做Proxy或Surrogate 中文都可译为 代理 所谓代理 就是一个人或者一个机构代表另一个人或者另一个机构采取行动 在一些情况下 一个客户不想或者不能够直接引用一个对象 而代理对象可以在客户端和目标对象之间起
  • Dalvik虚拟机简要介绍和学习计划

    通过修改 android framework base core jni AndroidRuntime cpp 中的 property get dalvik vm heapsize heapsizeOptsBuf 4 16m 来修改 dal
  • 电脑连接蓝牙耳机还是外放,输出设备只有扬声器怎么解决?

    1 问题描述 电脑连接蓝牙耳机耳机后 声音依然外放 输出设备只有扬声器 添加输出设备也找不到蓝牙耳机 2 排查问题 如果大家遇到的问题与我不同 还请查阅其他文章 右键计算机图标 gt 管理 gt 设备管理器 gt 声音 视频和游戏控制器 发
  • 神经网络应用: 手写数字识别(MNIST数据集)

    1 前言 本文使用 tensorflow 2 10 0 版本构建神经网络模型并进行训练 不同版本之间的 API 可能会有不同 请选择合适的版本学习 2 MNIST 数据集介绍 MNIST数据集 Mixed National Institut
  • 高性能计算(HPC)和智能计算理解

    1 现代终端设备一般都跟云端服务器相连 但只要可能 我们都希望计算可以在本地终端解决 这样做的好处是多方面的 既可以减小网络带宽的压力 又可以避免网络传输产生的时延 还可以让用户的数据更安全 现代终端设备一般用一个片上系统 SoC 做计算
  • Docker安装MinIO详细步骤

    本篇博客主要记录在Docker当中安装MinIO 目录 一 查看docker环境是否正常 二 下载minIO的镜像 三 创建minIO容器 四 访问地址 五 安装遇到问题 1 问题一 2 问题二 3 问题三 一 查看docker环境是否正常
  • Ubuntu18 04安装QQ

    Ubuntu18 04安装QQ Created time December 20 2022 5 12 PM Last edited time December 20 2022 6 15 PM Tags QQ Ubuntu18 04 截图工具
  • Flutter 第三方SDK集成(友盟统计,极光推送,百度地图)

    友盟统计 Flutter SDK集成 首先创建一个项目 接着去友盟工作台添加应用 添加成功后会得到AppKey 集成友盟 Flutter SDK 下载Demo Demo地址 https developer umeng com api sdk
  • Java实现多线程下载

    思路 1 基本思路是将文件分段切割 分段传输 分段保存 2 分段切割用到HttpUrlConnection对象的setRequestProperty Range bytes start end 方法 3 分段传输用到HttpUrlConne
  • 《面试准备》C++链表操作3(合并两个有序链表)

    include
  • Unity Shader入门精要第七章 基础纹理 单张纹理

    Unity系列文章目录 文章目录 Unity系列文章目录 前言 一 7 1单张纹理 参考 前言 纹理最初的目的就是使用一张图片来控制模型的外观 使用纹理映射 texture mapping 技 术 我们可以把一张图 黏 在模型表面 逐纹素
  • PID的积分抗饱和

    目录 1 什么是积分饱和 2 实际的例子 3 负面影响 4 如何防止积分饱和 5 PID算法 抗饱和 1 什么是积分饱和 积分饱和 Integral windup或integrator windup 是指PID控制器或是其他有积分器的控制器
  • linux中KVM桥接网卡br0

    在redhat Eenterprise 6或者CentOS 6以上版本在使用KVM虚拟化的时 会需要配置到桥接网卡 下面就非常简单的讲一下桥接的方法 真的很简单 查看eth0的现有状态 root localhost cd etc sysco
  • Spring Boot开发时Java对象和Json对象互转

    作者简介 练习时长两年半的Java up主 个人主页 程序员老茶 ps 点赞 是免费的 却可以让写博客的作者开兴好久好久 系列专栏 Java全栈 计算机系列 火速更新中 格言 种一棵树最好的时间是十年前 其次是现在 动动小手 点个关注不迷路
  • 安卓手机玩游戏卡顿怎么解决_安卓手机卡顿,都是在桌面上卸载软件,这样是没用的!...

    现在的时代手机对我们来说已经是必不可少的了可以说是情人一样走哪都带着 智能手机尤其是这几年 随着国产手机的迅猛发展 其实我们可以看到无论男女老少 基本上都有自己的手机 现在学生都用手机了 我记得我上学那会没家长没给买手机我初3才买手机的 现
  • Composer自动加载(一)

    我的个人博客 逐步前行STEP Composer是PHP的基于项目的依赖管理工具 它本身集成一个autoloader 支持PSR 4 PSR 0 classmap files 四种自动加载方式 首先介绍一下PSR 4与PSR 0 介绍这两种
  • Qt中csv文件的导入与导出

    CSV 1 简介 全称 Comma Separated Values 是 逗号分隔值 的英文缩写 通常是纯文本文件 一般用wordWPS或是记事本打开 2 规则 1 开头不留空 以行为单位 2 可含或不含列名 含列名则居文件第一行 3 一行