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