widget.h
#include <QWidget>
#include <QSettings>
#include <string>
using std::string;
typedef struct
{
string ip;
int port;
}ServerSetting;
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
public:
ServerSetting getServerSetting();
void setServersetting(ServerSetting &serverSetting);
private slots:
void on_pushButton_clicked(bool checked);
void on_pushButton_2_clicked(bool checked);
void on_pushButton_3_clicked();
void on_pushButton_4_clicked();
private:
Ui::Widget *ui;
private:
//全局的setting设置
QSettings settings;
};
widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <QSettings>
#include <QDebug>
#include <QCoreApplication>
#include <iostream>
using namespace std;
//QSettings settings;
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
getServerSetting();
//全局的setting设置
// QCoreApplication::setApplicationName ( QObject::tr( "IVAS" ) );
// QCoreApplication::setOrganizationName( QObject::tr( "ISmart" ) );
}
Widget::~Widget()
{
delete ui;
}
ServerSetting Widget::getServerSetting()
{
QSettings settingsServer("test.ini", QSettings::IniFormat);
ServerSetting serverSetting;
serverSetting.ip = settingsServer.value("ControlServer/ip").toString().toStdString();
serverSetting.port= settingsServer.value("ControlServer/port").toInt();
cout << "读取配置文件:" << serverSetting.ip << ", " << serverSetting.port << endl;
return serverSetting;
}
void Widget::setServersetting(ServerSetting &serverSetting)
{
QSettings settingsServer("test.ini", QSettings::IniFormat);
settingsServer.beginGroup("ControlServer");
settingsServer.setValue("ip", serverSetting.ip.c_str());
settingsServer.setValue("port", serverSetting.port);
settingsServer.endGroup();
cout << "修改配置文件:" << serverSetting.ip << ", " << serverSetting.port << endl;
}
//注册表开机自启动位置
#define REG_RUN "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run"
void Widget::on_pushButton_clicked(bool checked)
{
QApplication::setApplicationName("autostart");
QString applicationName = QApplication::applicationName();
qDebug() << "applicationName:" << applicationName;
QSettings *settings = new QSettings(REG_RUN, QSettings::NativeFormat);
if( checked )
{
QString applicationFilePath = QApplication::applicationFilePath();
qDebug() << "applicationFilePath:" << applicationFilePath;
settings->setValue(applicationName, applicationFilePath.replace("/", "\\"));//recommended
// settings->setValue(applicationName, applicationFilePath);
}
else
{
// settings->setValue(applicationName, "");//ok
settings->remove(applicationName);//recommended
}
delete settings;
}
//注册表其他位置
#define REG "HKEY_CURRENT_USER\\Software\\yanghuan"
void Widget::on_pushButton_2_clicked(bool checked)
{
QSettings *settings = new QSettings(REG, QSettings::NativeFormat);
if( checked )
{
settings->setValue("registered", true);
}
else
{
settings->remove("registered");
}
qDebug() << settings->value("registered").toBool();
delete settings;
}
void Widget::on_pushButton_3_clicked()
{
//局部的setting
QSettings *settings = new QSettings("ISmart", "IVAS"); // 公司或组织名 // 应用程序名
// settings->value("Setting/AutoRun");//如果不查看一下,注册表不会显示 公司或组织名/应用程序名,并且如果只是查看并没有赋值也不会出现Setting/AutoRun
settings->setValue("Setting/AutoRun", true);
settings->setValue("Name", true);
delete settings;
//全局的setting设置,不管用?
// settings.setValue("Setting/AutoRun", true);
}
void Widget::on_pushButton_4_clicked()
{
ServerSetting s = {"111.111.111.111", 11111};
setServersetting(s);
}
注意点:
1. 如果设置的文件不存在,QSettings会自动创建文件。
2. QSettings默认排序。
3. QSettings可以注册自定义键值对类型。