有时候,我们会有很多很多的控件数据需要保存,比如说QLineEdit的text,或者说QSpinBox的value
手动去维护,太烦人
于是,我就整理了一下,让数据可以自动的保存和读取
说明一下,我这里没有写完所有的控件,但是框架我已经给你搭好了,希望能给你启迪
.h文件
#include <QWidget>
#include <QLineEdit>
#include <QTextEdit>
#include <QSpinBox>
#include <QDoubleSpinBox>
#include <QTimeEdit>
#include <QDateEdit>
#include <QDateTimeEdit>
#include <QDial>
#include <QSlider>
#include <QAbstractSlider>
#include <QLabel>
#include <QTextBrowser>
#include <QLCDNumber>
#include <QProgressBar>
#include <QRadioButton>
#include <QCheckBox>
class JasonQt_Settings_WidgetDataControl
{
public:
enum controlFlagsEnum
{
controlFlagsRecursion = 0x1,
controlFlagsPos = 0x2,
controlFlagsSize = 0x4,
controlFlagsGeometry = 0x6,
controlFlagsEnabled = 0x8,
controlFlagsQLineEdit = 0x10,
controlFlagsQTextEdit = 0x20,
controlFlagsQSpinBox = 0x40,
controlFlagsQDoubleSpinBox = 0x80,
controlFlagsQTimeEdit = 0x100,
controlFlagsQDateEdit = 0x200,
controlFlagsQDateTimeEdit = 0x400,
controlFlagsQDial = 0x800,
controlFlagsQSlider = 0x1000,
controlFlagsQAbstractSlider = 0x2000,
controlFlagsInputWidgets = 0xfff0,
controlFlagsQLabel = 0x10000,
controlFlagsQTextBrowser = 0x20000,
controlFlagsQLCDNumber = 0x40000,
controlFlagsQProgressBar = 0x80000,
controlFlagsDisplayWidgets = 0xf0000,
controlFlagsQRadioButton = 0x1000000,
controlFlagsQCheckBox = 0x2000000,
controlFlagsButtons = 0xf000000,
controlFlagsAll = 0xffffffff
};
public:
static void save(QSettings *settings, const QWidget *widget, const controlFlagsEnum &controlFlags);
static void read(QSettings *settings, QWidget *widget, const controlFlagsEnum &controlFlags);
};
.cpp文件
void JasonQt_Settings_WidgetDataControl::save(QSettings *settings, const QWidget *widget, const controlFlagsEnum &controlFlags)
{
if(widget->objectName().isEmpty()) { return; }
settings->beginGroup(widget->objectName());
const QObjectList children = widget->children();
foreach(QObject *now, children)
{
if(now->objectName().isEmpty()) { continue; }
if(now->objectName().indexOf("qt_") == 0) { continue; }
if((controlFlags & controlFlagsPos) && now->inherits("QWidget"))
{
settings->setValue(now->objectName() + ".pos", qobject_cast&l