最全Qt知识点梳理 —— 自定义数据结构序列化与反序列化,2024年最新行业寒冬

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

QSize

QString

QTime

QTransform

QUrl

QVariant

QVector2D

QVector3D

QVector4D

QVector

原文地址:https://doc.qt.io/qt-5/datastreamformat.html

项目结构

CommonData类:公共类,用于存储数据;方便项目中其他类文件调用,数据使用静态存储;

MainWindow类:使用CommonData中静态数据,包含UI界面,实现数据的序列化与反序列化;

数据结构信息

根据以上描述,定义如下数据struct,并声明实现friend友元函数:

注意:读和写的变量顺序必须一致

//定义静态数据结构

static struct ParamsData{

QString m_paramFile=“qwe”;

int m_imagenubth=-1;

bool m_SysInitDone=false;

int m_grabimgIdx=112;

float m_axisNum=123.234f;

bool m_homeState=true;

QPoint mark1_Center=QPoint(23,23);

double mark1_Radius=5.0008;

friend QDataStream &operator<<(QDataStream &stream, const ParamsData &data)//序列化

{

stream << data.m_paramFile;

stream << data.m_imagenubth;

stream << data.m_SysInitDone;

stream << data.m_grabimgIdx;

stream << data.m_axisNum;

stream << data.m_homeState;

stream << data.mark1_Center;

stream << data.mark1_Radius;

return stream;

}

friend QDataStream &operator>>(QDataStream &stream, ParamsData &data)//反序列化

{

stream >> data.m_paramFile;

stream >> data.m_imagenubth;

stream >> data.m_SysInitDone;

stream >> data.m_grabimgIdx;

stream >> data.m_axisNum;

stream >> data.m_homeState;

stream >> data.mark1_Center;

stream >> data.mark1_Radius;

return stream;

}

}paramsData;

界面如下:

CommonData.h

#ifndef COMMONDATA_H

#define COMMONDATA_H

#include

#include

//用于存储公共数据

class CommonData : public QObject

{

Q_OBJECT

public:

explicit CommonData(QObject *parent = nullptr);

public:

//定义静态数据结构

static struct ParamsData{

QString m_paramFile=“qwe”;

int m_imagenubth=-1;

bool m_SysInitDone=false;

int m_grabimgIdx=112;

float m_axisNum=123.234f;

bool m_homeState=true;

QPoint mark1_Center=QPoint(23,23);

double mark1_Radius=5.0008;

friend QDataStream &operator<<(QDataStream &stream, const ParamsData &data)//序列化

{

stream << data.m_paramFile;

stream << data.m_imagenubth;

stream << data.m_SysInitDone;

stream << data.m_grabimgIdx;

stream << data.m_axisNum;

stream << data.m_homeState;

stream << data.mark1_Center;

stream << data.mark1_Radius;

return stream;

}

friend QDataStream &operator>>(QDataStream &stream, ParamsData &data)//反序列化

{

stream >> data.m_paramFile;

stream >> data.m_imagenubth;

stream >> data.m_SysInitDone;

stream >> data.m_grabimgIdx;

stream >> data.m_axisNum;

stream >> data.m_homeState;

stream >> data.mark1_Center;

stream >> data.mark1_Radius;

return stream;

}

}paramsData;

};

#endif // COMMONDATA_H

CommonData.cpp

#include “commondata.h”

CommonData::CommonData(QObject *parent) : QObject(parent)

{

}

CommonData::ParamsData CommonData::paramsData;//此句需要,否则报错

MainWindow.h

#ifndef MAINWINDOW_H

#define MAINWINDOW_H

#include

QT_BEGIN_NAMESPACE

namespace Ui { class MainWindow; }

QT_END_NAMESPACE

class MainWindow : public QMainWindow

{

Q_OBJECT

public:

MainWindow(QWidget *parent = nullptr);

~MainWindow();

void PrintContent();

private slots:

void on_btn_Read_clicked();

void on_btn_Write_clicked();

void on_btn_ChangeVal_clicked();

private:

Ui::MainWindow *ui;

};

#endif // MAINWINDOW_H

MainWindow.cpp

#include “mainwindow.h”

#include “ui_mainwindow.h”

#include “commondata.h”

#include

#include

MainWindow::MainWindow(QWidget *parent)
QMainWindow(parent)

, ui(new Ui::MainWindow)

{

ui->setupUi(this);

}

MainWindow::~MainWindow()

{

delete ui;

}

void MainWindow::on_btn_Read_clicked()// 从文件中读取/初始化数据

{

QFile file(“data.sx”);//文件在程序运行目录下

if(file.exists())//如果文件存在 则从文件读取数据

{

file.open(QIODevice::ReadOnly);

QDataStream input(&file);

input >> CommonData::paramsData;

file.close();

//打印出各个变量的值

qDebug() << QStringLiteral(“打印出文件中读出的值…”);

PrintContent();

}

else//如果文件不存在 则使用初始化数据

{

//打印出各个变量的值

qDebug() << QStringLiteral(“打印出初始化的值…”);

PrintContent();

}

}

void MainWindow::on_btn_Write_clicked()//将数据写入文件保存

{

QFile file(“data.sx”);//文件在程序运行目录下

file.open(QIODevice::WriteOnly);

QDataStream output(&file);

output << CommonData::paramsData;

file.close();

}

void MainWindow::on_btn_ChangeVal_clicked()//改变数据的值,查看是否能正确写入文件并读出

{

CommonData::paramsData.m_axisNum=234.123f;

CommonData::paramsData.m_homeState=false;

CommonData::paramsData.m_paramFile=“wer”;

CommonData::paramsData.m_grabimgIdx=113;

CommonData::paramsData.m_imagenubth=168;

CommonData::paramsData.mark1_Center=QPoint(66,88);

CommonData::paramsData.mark1_Radius=6.08080808;

CommonData::paramsData.m_SysInitDone=true;

qDebug() << QStringLiteral(“打印改变后的值…”);

PrintContent();

}

void MainWindow::PrintContent()//打印数据 便于调试查看

{

qDebug() << CommonData::paramsData.m_axisNum;

qDebug() << CommonData::paramsData.m_homeState;

qDebug() << CommonData::paramsData.m_paramFile;

qDebug() << CommonData::paramsData.m_grabimgIdx;

qDebug() << CommonData::paramsData.m_imagenubth;

qDebug() << CommonData::paramsData.mark1_Center;

qDebug() << CommonData::paramsData.mark1_Radius;

qDebug() << CommonData::paramsData.m_SysInitDone;

}

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

;

qDebug() << CommonData::paramsData.m_imagenubth;

qDebug() << CommonData::paramsData.mark1_Center;

qDebug() << CommonData::paramsData.mark1_Radius;

qDebug() << CommonData::paramsData.m_SysInitDone;

}

[外链图片转存中…(img-eJoqi8EK-1715721404597)]
[外链图片转存中…(img-fRfUpvgU-1715721404598)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

  • 15
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值