设置

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可以注册自定义键值对类型。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值