#include "dialog.h"
#include "ui_dialog.h"
Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);
organization = "QtProject";
application = "OrganizationDefaults";
ui->treeWidget->setColumnCount(2);
ui->treeWidget->setHeaderLabels(QStringList()<<tr("key")<<tr("value"));
ui->treeWidget->setColumnWidth(0,260);
readSetting();//读取注册表
}
void Dialog::readSetting()
{
QSettings settings(organization,application);//读取注册表
ui->treeWidget->clear();//清除树
addChildSettings(settings,0,"");
ui->treeWidget->sortByColumn(0);
ui->treeWidget->setFocus();//设置焦点
this->setWindowTitle(tr("Settings Viewer -%1 by %2").arg(application).arg(organization));
}
void Dialog::addChildSettings(QSettings &settings, QTreeWidgetItem *parent, const QString &group)
{
if(!parent)
parent= ui->treeWidget->invisibleRootItem();//找树根
QTreeWidgetItem *item;
settings.beginGroup(group);
foreach(QString key,settings.childKeys())
{
item = new QTreeWidgetItem(parent);//添加到树根上
item->setText(0,key);
item->setText(1,settings.value(key).toString());
}
foreach (QString group,settings.childGroups() )
{
item = new QTreeWidgetItem(parent);
item->setText(0,group);
addChildSettings(settings,item,group);//递归调用
}
settings.endGroup();
}
Dialog::~Dialog()
{
delete ui;
}
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
#include <QSettings>
#include <QTreeWidgetItem>
namespace Ui {
class Dialog;
}
class Dialog : public QDialog
{
Q_OBJECT
public:
explicit Dialog(QWidget *parent = 0);
~Dialog();
private:
void readSetting();
void addChildSettings(QSettings &settings,QTreeWidgetItem *item,const QString &group);
private:
Ui::Dialog *ui;
QString organization;
QString application;
};
#endif // DIALOG_H