1.環境紹介
オペレーティングシステムの紹介: win1064ビット
QTバージョン: 5.12.6
2.機能紹介
アプリケーションの実行中、ユーザーはアプリケーションに対していくつかのパーソナライズされた設定を行うことがよくあります。アプリケーションを閉じた後、アプリケーションを最後に開いたときに、最後の設定が復元されます。プログラムでは、これらの設定をローカルファイルに保存して保存し、次回プログラムを開いたときに読み込むことができます。
QTの組み込みQDataStreamクラスは、データストリームをシリアル化するためのメソッドを提供します。データストリームはエンコードされた情報のバイナリストリームであり、ホストオペレーティングシステム、CPU、またはバイトオーダーとは100%関係ありません。QTの組み込みQTextStreamとQDataStreamはどちらもデータストリーム指向です。QTextStreamが完了できる関数はQDataStreamで完了できますが、焦点は異なります。QTextStreamはテキストストリーム処理用です。QTextStreamは読み取り用の通常のテキストデータを格納します。QTextStreamの主な制限は、ピクセルマップQPixmap、カラーQColorなどの入力データタイプが少ないことです。これらのタイプのデータは保存できません。バイナリデータは、現在のソフトウェア構成情報、ステータス情報、ネットワークデータパケット送信などの保存など、実際のソフトウェアで多くの場合に使用されます。これらのバイナリデータの処理には、QDataStreamを使用する必要があります。
QDataStreamは、QT自体によってカプセル化された型を含む、すべてのC ++基本型を、カプセル化のために基本型に分解できます。
3、ソースコード
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);
}