Qt 序列化函数和反序列化函数

news2024/9/26 1:28:10

文章目录

  • 界面
  • 学生类
  • 序列化函数
  • 反序列化函数
  • 刷新所选择的下拉表值
  • 添加

在这里插入图片描述

界面

在这里插入图片描述

学生类

// 创建学生信息类
class studentInfo
{
public:
    QString id;     // 学号
    QString name;   // 学生姓名
    QString age;        // 学生年龄
    // 重写QDataStream& operator<<操作符,做数据序列化操作
    friend QDataStream& operator<<(QDataStream &stream, const studentInfo &student)
    {
        // 将数据输入流对象中
        stream << student.id;
        stream << student.name;
        stream << student.age;
        return stream;
    }

    // 重写QDataStream& operator>>操作符,做数据反序列化操作
    friend QDataStream& operator>>(QDataStream &stream, studentInfo &student)
    {
        // 从流对象中输出数据到学生结构体引用中
        stream >> student.id;
        stream >> student.name;
        stream >> student.age;
        return stream;
    }
};

序列化函数

将其放入容器内方便便利每一个学生参数的值

 QList<studentInfo> list;
 studentInfo student;

获取文本编辑的值读取到序列化文件中进行保存

//保存
void MainWindow::on_pushButton_clicked()
{
    studentInfo student;
    //序列化为二进制文件存在本地
    QFile file(QApplication::applicationDirPath()+"/"+"student.st");           //定义文件路径
    file.open(QIODevice::WriteOnly); //以只写模式打开
    QDataStream out(&file);          //定义数据流



    student.id=ui->m_Id->text();
    student.age=ui->m_Age->text();
    student.name=ui->m_Name->text();

    list.append(student);

    out<<list;
    qDebug()<<list[0].id;
    file.close();
    qDebug()<<(QString("OK"));
    ReShowCombox();
}

刷新下拉表的值

void MainWindow::ReShowCombox()
{
    // 获取 studentInfo 对象
    if(list.size()>0)
    {
       ui->comboBox->addItem(list.last().name);

    }
}

反序列化函数

读取文件的值,添加到下拉列表中

void MainWindow::GetFile()
{
    studentInfo student;
    //反序列化本地二进制文件到程序中
    QFile file(QApplication::applicationDirPath()+"/"+"student.st");//文件在程序运行目录下
    if(file.exists())//如果文件存在,则从文件读取数据
     {
          file.open(QIODevice::ReadOnly);
          QDataStream in(&file);


          in>>list;
          file.close();

      }

    // 获取 studentInfo 对象
    if(list.size()>0)
    {
        student.id=list.at(0).id;
        student.age=list.at(0).age;
        student.name=list.at(0).name;
        ui->m_Id->setText(student.id);
        ui->m_Age->setText(student.age);
        ui->m_Name->setText(student.name);

        for(int i=0;i<list.size();i++)
        {
            ui->comboBox->addItem(list.at(i).name);
        }

    }

}

刷新所选择的下拉表值

连接信号与槽函数

 connect(ui->comboBox, QOverload<int>::of(&QComboBox::currentIndexChanged), this, &MainWindow::on_comboBox_currentIndexChanged);

获取到当前的值

void MainWindow::on_comboBox_currentIndexChanged(int index)
{
    if (index >= 0) {
           // 获取当前选中项的 studentInfo 对象
           studentInfo student = list.at(index);

           // 刷新其他控件的值
           ui->m_Id->setText(student.id);
           ui->m_Name->setText(student.name);
           ui->m_Age->setText(student.age);
       }
}

添加

void MainWindow::on_pushButton_2_clicked()
{
    ui->m_Id->setText("");
    ui->m_Name->setText("");
    ui->m_Age->setText("");

}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux---(四)权限

文章目录 一、shell命令及运行原理1.什么是操作系统&#xff1f;2.外壳程序3.用户为什么不直接访问操作系统内核?4.操作系统内核为什么不直接把结果显示出来&#xff1f;非要加外壳程序&#xff1f;5.shell理解重点总结&#xff08;1&#xff09;shell是什么&#xff1f;&…

勒索病毒最新变种.locked1勒索病毒来袭,如何恢复受感染的数据?

引言&#xff1a; 在当今数字化时代&#xff0c;网络威胁不断进化&#xff0c;.locked1勒索病毒就是其中一种常见的恶意软件。这种病毒会加密您的文件&#xff0c;然后勒索赎金以解锁它们。本文将详细介绍.locked1勒索病毒&#xff0c;包括如何恢复被加密的数据文件和如何预防…

Hadoop3.0大数据处理学习1(Haddop介绍、部署、Hive部署)

Hadoop3.0快速入门 学习步骤&#xff1a; 三大组件的基本理论和实际操作Hadoop3的使用&#xff0c;实际开发流程结合具体问题&#xff0c;提供排查思路 开发技术栈&#xff1a; Linux基础操作、Sehll脚本基础JavaSE、Idea操作MySQL Hadoop简介 Hadoop是一个适合海量数据存…

https下载图片

OpenSSL用法示例 OpenSSL源码安装 对于ubuntu&#xff0c;懒得编译源码可以直接安装 sudo apt-get install libssl–dev /usr/include/openssl/ssl.h CMakeLists中添加 link_libraries(ssl crypto) apt-get安装不需要再制定libssl.a, libcrypto.a的路径了, 就像用libc标…

柏拉图式爱情是同性之爱,绘画是理念世界的二次模仿

公元前427年&#xff0c;柏拉图出生在雅典。 柏拉图20岁成为苏格拉底的弟子。 有一次&#xff0c;柏拉图问苏格拉底&#xff1a;“什么是爱情&#xff1f;”苏格拉底说&#xff1a;“请穿越麦田&#xff0c;摘一株最大最金黄的麦穗回来。不走回头路&#xff0c;只能摘一次。”…

永恒之蓝漏洞 ms17_010 详解

文章目录 永恒之蓝 ms 17_0101.漏洞介绍1.1 影响版本1.2 漏洞原理 2.信息收集2.1 主机扫描2.2 端口扫描 3. 漏洞探测4. 漏洞利用5.后渗透阶段5.1创建新的管理员账户5.2开启远程桌面5.3蓝屏攻击 永恒之蓝 ms 17_010 1.漏洞介绍 永恒之蓝&#xff08;ms17-010&#xff09;爆发于…

Power BI 傻瓜入门 9. 设计和部署数据模型

本章内容包含&#xff1a; 详细说明设计数据模型的技术要求Power BI Desktop中基本数据模型的设计将数据模型从Power BI Desktop发布到Power BI Services 在数据进入Power BI后对其进行操作既是一门艺术&#xff0c;也是一门科学。导入到任何应用程序中的数据不仅需要注意数据…

7-3、S曲线生成器【51单片机控制步进电机-TB6600系列】

摘要&#xff1a;本节介绍步进电机S曲线生成器的计算以及使用 一.计算原理 根据上一节内容&#xff0c;已经计算了一条任意S曲线的函数。在步进电机S曲线加减速的控制中&#xff0c;需要的S曲线如图1所示&#xff0c;横轴为时间&#xff0c;纵轴为角速度&#xff0c;其中w0为起…

PyCharm 安装 cx_Oracle 失败

我在PyCharm的终端用 pip安装cx_Oracle失败&#xff0c;报错情况如下&#xff1a; ERROR: Could not build wheels for cx_Oracle, which is required to install pyproject.toml-based projects 出错原因&#xff1a; python 的版本太高了&#xff0c;我的是3.11版本的&…

开源思维导图白板工具

https://okso.app https://drawio.com https://tldraw.com https://excalidraw.com

Qt QPixmap绘制一层透明度蒙版

效果 为了在一个图片上绘制透明蒙层效果&#xff0c;思路&#xff1a; 绘制原图。原图上绘制一层透明度。 代码 QImage image(":/resource/icon24_File_Word.png");QPixmap pixmap QPixmap::fromImage(image);ui->label->setPixmap(pixmap);// 重新构造一个…

[Docker]二.Docker 镜像,仓库,容器介绍以及详解

一.Docker 镜像,容器,仓库的简单介绍 通俗来讲:镜像相当于VM虚拟机中的ios文件,容器相当于虚拟机系统,仓库相当于系统中的进程或者执行文件,容器是通过镜像创建的 1.镜像 Docker 镜像就是一个 Linux 的文件系统&#xff08; Root FileSystem &#xff09;&#xff0c;这个文…

np.linspace精确度

前言 今天发现一个大坑&#xff0c;如果是序列是小数的话&#xff0c;不要用np.linspace&#xff0c;而要用np.arrange指定等差序列。比如入下图中a和b是一样的意思&#xff0c;但是b是有较大误差的。 anp.arange(0,4,0.4) bnp.linspace(0,4,10) print("a",a) prin…

HDRP中ShaderGraph自发光(Emission)不工作

在Unity中使用HDRP管线时&#xff0c;在ShaderGraph中制作自发光效果可能会遇到这么一个问题&#xff0c;直接将颜色连到主节点的Emission上没效果。 原因&#xff1a;HDRP场景的灯光是基于物理的&#xff0c;所以灯光的强度远远大于默认的自发光强度&#xff0c;自发光就会不…

蓝桥杯动态规划每日一题

一、买卖股票的最佳时机III 股票最佳时机 1.状态表示 dp[i]:到达i天&#xff0c;所能获得的最大利润 但是我们唯一不清楚的是&#xff0c;他完成了几笔交易&#xff0c;所以不如&#xff0c;就设置一种二维数组 dp[m][3] 2是说第0天是第0笔&#xff0c;第一天是第1笔&#xff…

003 后台系统-搭建前端环境

课程链接 一.下载和配置vscode与nodejs 1.vscode视频链接 2.打开vscode下载以下插件&#xff1a; 3.安装nodejs16.19.0 4.检测nodejs是否安装成功&#xff0c;安装地址无中文 在cmd界面输入命令&#xff1a;node -v 显示版本则安装成功 5.在vscode中创建工作区 在电脑中创…

嵌入式 Tomcat 调校

SpringBoot 嵌入了 Web 容器如 Tomcat/Jetty/Undertow&#xff0c;——这是怎么做到的&#xff1f;我们以 Tomcat 为例子&#xff0c;尝试调用嵌入式 Tomcat。 调用嵌入式 Tomcat&#xff0c;如果按照默认去启动&#xff0c;一个 main 函数就可以了。 简单的例子 下面是启动…

T113-S3-buildroot文件系统tar解压缩gz文件

目录 前言 一、现象描述 二、解决方案 三、tar解压缩.gz文件 总结 前言 本文主要介绍全志T113-S3平台官方SDK&#xff0c;buildroot文件系统tar不支持.gz文件解压缩的问题以及如何配置buildroot文件系统解决该问题的方法介绍。 一、现象描述 在buildroot文件系统中&#xff…

图像压缩(4)《数字图像处理》第八章 8.3节 数字图像水印

图像压缩&#xff08;3&#xff09;《数字图像处理》第八章8.3节数字图像水印 一. 前言二.章节引言三.简单综述三.本章小结四.参考文献四. 小结 一. 前言 始于那本深蓝色的大块头&#xff0c;冈萨勒斯的《数字图像处理》&#xff0c;从此走上了图像信号处理的不归路&#xff0…

Java开发-WebSocket

WebSocket是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工通信-浏览器和服务器只需要完成一次握手&#xff0c;两者之间就可以创建持久性的连接&#xff0c;并实现 双向数据传输。 使用 导入maven坐标 <dependency><groupId>org.springframework.bo…