一、环境介绍
操作系统介绍:win10 64位
QT版本: 5.12.6
二、功能介绍
应用程序运行时,用户经常会对程序做一些个性化设置; 关闭程序之后,下次打开还原上次的设置。程序里可以将这些设置保存到本地文件了存放,下次打开程序时,再加载进来即可。
QT内置的QDataStream 类提供了串行化处理数据流的方法。数据流是一个编码信息的二进制流,它与主机的操作系统、CPU 或字节顺序 100%的没有关系。 QT内置的QTextStream 和 QDataStream 都是面向数据流的, QTextStream 可以完成的功能 QDataStream 都能完成,但是他们的侧重点不同。 QTextStream 是针对文本流的处理, QTextStream 中存放的都是用来阅读的普通文本数据,QTextStream 的局限性主要是支持输入的数据类型较少,比如:像素图 QPixmap、颜色 QColor 这些类型的数据就无法保存。 在实际的软件中很多情况下都会用到二进制数据,比如:保存当前软件的配置信息,状态信息,网络数据包传输等。这些二进制数据的处理,就需要使用 QDataStream 实现。
QDataStream 可以将所有的 C++ 基本类型,包括 QT 自己封装的类型,按顺序分解成基本类型进行封装。
三、源代码
3.1 存放数据示例
qint32 lcd_image_w=1920; qint32 lcd_image_h=1080; qint32 image_val=80; quint16 server_port=8888; //服务器端口号 //配置文件名称 #define ConfigFile "cofnig.ini" //从UI界面获取用户的个性化配置参数 lcd_image_w=ui->spinBox_w->value(); lcd_image_h=ui->spinBox_h->value(); image_val=ui->spinBox_image_val->value(); server_port=ui->spinBox_port->value(); /*保存数据到文件,方便下次加载*/ QString text; text=QCoreApplication::applicationDirPath()+"/"+ConfigFile; QFile filesrc(text); filesrc.open(QIODevice::WriteOnly); QDataStream out(&filesrc); out << lcd_image_w; //序列化写---宽 out << lcd_image_h; //序列化写---高 out << image_val; //序列化写---质量 out << server_port; //服务器端口号 filesrc.flush(); filesrc.close();
3.2 读取数据示例
qint32 lcd_image_w=1920; qint32 lcd_image_h=1080; qint32 image_val=80; quint16 server_port=8888; //服务器端口号 //配置文件名称 #define ConfigFile "cofnig.ini" //读取配置文件 QString text; text=QCoreApplication::applicationDirPath()+"/"+ConfigFile; //判断文件是否存在 if(QFile::exists(text)) { QFile filenew(text); filenew.open(QIODevice::ReadOnly); QDataStream in(&filenew); // 从文件读取序列化数据 in >> lcd_image_w >> lcd_image_h >> image_val>>server_port; //提取写入的数据 filenew.close(); //设置界面值 ui->spinBox_w->setValue(lcd_image_w); ui->spinBox_h->setValue(lcd_image_h); ui->spinBox_image_val->setValue(image_val); ui->spinBox_port->setValue(server_port); }