Qt:让控件(widgets)内容可以自动 保存/读取 到配置文件(QSettings)中

有时候,我们会有很多很多的控件数据需要保存,比如说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
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值