QTアプリケーションプログラミング:アプリケーション構成の保存と復元

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);
}

 

おすすめ

転載: blog.csdn.net/xiaolong1126626497/article/details/111624177