一、环境介绍
操作系统介绍: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 存放数据示例
代码语言:javascript复制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 读取数据示例
代码语言:javascript复制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);
}