Qt之QSettings类用法

QSettings类保存程序的一些配置信息,比如窗口大小、位置、用户的个性选项等。QSettings类可以把这些信息存储在Windows上的系统注册表中,或者使用INI文本文件保存在本地。

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    initSetting();
    QWidget *widget = new QWidget;
    setCentralWidget(widget);
    QString color = readSettings();
    qDebug() << color;
    if(color == "red"){
        widget->setStyleSheet("background-color:red");
    }else if(color == "blue"){
        widget->setStyleSheet("background-color:blue");
    }else{
        widget->setStyleSheet("background-color:white");
    }
    QWidgetAction *action = new QWidgetAction(0);
    QComboBox *box = new QComboBox;
    QPixmap pixmap(30,30);
    pixmap.fill(Qt::red);
    box->addItem(QIcon(pixmap),"红色");
    pixmap.fill(Qt::blue);
    box->addItem(QIcon(pixmap),"蓝色");
    action->setDefaultWidget(box);
    menuBar()->addMenu("背景色")->addAction(action);

    connect(box,QOverload<int>::of(&QComboBox::activated),[=](int index){
        if(index == 0){
            widget->setStyleSheet("background-color:red");
            m_setting->beginGroup("background-color");
            m_setting->setValue("color","red");
            m_setting->endGroup();
        }else{
            widget->setStyleSheet("background-color:blue");
            m_setting->beginGroup("background-color");
            m_setting->setValue("color","blue");
            m_setting->endGroup();
        }
    });
}

MainWindow::~MainWindow()
{

}

void MainWindow::initSetting()
{
    //保存格式为ini文本
    m_setting = new QSettings("F:/bbb.ini",QSettings::IniFormat,this);
    //保存格式为注册表(windows系统中) 不建议使用
    //    m_setting = new QSettings("F:/",QSettings::NativeFormat,this);
}

QString MainWindow::readSettings()
{
    m_setting->beginGroup("background-color");
    QString color = m_setting->value("color","white").toString();
    m_setting->endGroup();

    //读取窗口配置
    m_setting->beginGroup("window");
    this->setGeometry(m_setting->value("geometry",QRect(30,30,300,200)).toRect());
    if(m_setting->value("fullScreen").toBool())
        this->setWindowState(Qt::WindowFullScreen);
    m_setting->endGroup();
    return color;
}

void MainWindow::closeEvent(QCloseEvent *event)
{
    //保存窗口属性
    m_setting->beginGroup("window");
    m_setting->setValue("geometry",this->geometry());
    m_setting->setValue("fullScreen",this->isFullScreen());
    m_setting->endGroup();
}

void initSetting()
{
    QApplication::setOrganizationName("orgName");
    QApplication::setOrganizationDomain("com");
}

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    initSetting();
    MainWindow w;
    w.show();

    return a.exec();
}

猜你喜欢

转载自blog.csdn.net/wei375653972/article/details/86620326