既有适合小白学习的零基础资料,也有适合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;
}
既有适合小白学习的零基础资料,也有适合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%以上物联网嵌入式知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新