gpt4 book ai didi

c++ - 使用 QT 设置获取配置文件设置

转载 作者:行者123 更新时间:2023-11-28 05:42:52 27 4
gpt4 key购买 nike

我正在使用 Qt 设置并将对象保存到文件中。它保存到一个名为 sessionrc 的文件中。

现在我正在尝试从设置中加载对象并将其保存回来。

问题是我无法从设置中识别对象,因此我无法加载所有已保存的配置文件。

我正在使用以下加载和保存功能

void ProfileManager::loadFrom(Settings &set, bool ownGroup)
{
qDebug()<<"LOAD";
foreach (const QString &group, set.childGroups()) {
if(group == "Profile")
{
Profile *profile = new Profile();
profile->setObjectName(group);
profile->loadFrom(set);
m_Profiles << profile;
}
}


EraObject::staticLoadFrom(set, this);

}

void ProfileManager::saveTo(Settings &set, bool ownGroup, bool force)
{
EraObject::staticSaveTo(set, this, ownGroup, force);

foreach(Profile * profile, m_Profiles) {
profile->saveTo(set);
}

}

当前设置文件为

[www]
Ta=20
Te=48
Texp=38
lim1=0
lim2=0
offset=0
profilename=www

[www] 是保存的配置文件。但我有很多。我将如何加载它并正确保存它

最佳答案

// main.cpp
#include <QCoreApplication>
#include <QSettings>
#include <QVector>
#include <QDebug>
#include <QMetaProperty>

class Profile : public QObject
{
Q_OBJECT
Q_PROPERTY(QString name READ name WRITE setName )
Q_PROPERTY(QString title READ title WRITE setTitle )

public:
explicit Profile(QObject *parent = 0) : QObject(parent) {
}

QString name() const {
return name_;
}
void setName(QString name) {
name_ = name;
}

QString title() const {
return title_;
}
void setTitle(QString title) {
title_ = title;
}

void save(QSettings& settings) const {
for(int i=0; i<metaObject()->propertyCount(); ++i) {
const auto& p = metaObject()->property(i);
if(p.isStored(this)) {
settings.setValue(p.name(), property(p.name()));
}
}
}

void load(QSettings& settings) {
for(int i=0; i<metaObject()->propertyCount(); ++i) {
const auto& p = metaObject()->property(i);
if(p.isStored(this)) {
setProperty(p.name(), settings.value(p.name()));
}
}
}

private:
QString name_;
QString title_;
};

#include "main.moc"

int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QObject garbageCollector;
QVector<Profile*> profiles;
{
Profile* p1 = new Profile(&garbageCollector);
p1->setName("profilename1");
p1->setTitle("Profile 1");
Profile* p2 = new Profile(&garbageCollector);
p2->setName("profilename2");
p2->setTitle("Profile 2");
profiles.append(p1);
profiles.append(p2);
}

QSettings s("profiles.ini", QSettings::IniFormat);

// write profiles
{
s.beginGroup("profiles");
foreach(const Profile*p, profiles) {
s.beginGroup(p->name());
p->save(s);
s.endGroup();
}
s.endGroup();
s.sync(); // force write
}
// read profiles
{
s.beginGroup("profiles");
foreach(const QString& g, s.childGroups()) {
Profile p;
s.beginGroup(g);
p.load(s);
s.endGroup();
qDebug() << p.name();
qDebug() << p.title();
}
s.endGroup();

}
return 0;
}

关于c++ - 使用 QT 设置获取配置文件设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36797329/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com