viewtopic.php?f=1&t=18562
Ich habe dazu zwei eigene ReadFunc und WriteFunc geschrieben, die ich jetzt registrieren möchte. Allerdings gelingt es mir nicht, einen Funktionszeiger auf meine Funktionen korrekt zu implementieren.
Ich arbeite mit einem Pimpl (QtSettings::Data), um die Implementierungsdetails meiner Klasse in der .cpp-Datei zu verstecken. Damit bekomme ich einen Compilerfehler:
Code: Alles auswählen
'&': Ungültige Operation auf Ausdruck einer gebundenen Memberfunktion
Code: Alles auswählen
bool (*readFctn)(QIODevice&, QSettings::SettingsMap&) = &readFromInternalMap;
Code: Alles auswählen
struct QtSettings::Data
{
QSettings* qSettings;
// Wird nur verwendet, wenn die Settings nicht an eine Datei angebunden werden sollen.
QMap<QString, QVariant> internalMap;
bool readFromInternalMap(QIODevice& device, QSettings::SettingsMap& map);
bool writeToInternalMap(QIODevice& device, const QSettings::SettingsMap& map);
// Data zur Anbindung an eine interne QMap
Data() :
qSettings(0)
{
bool (*readFctn)(QIODevice&, QSettings::SettingsMap&) = &readFromInternalMap;
bool (*writeFctn)(QIODevice&, const QSettings::SettingsMap&) = &writeToInternalMap;
const QSettings::Format InternalMapFormat = QSettings::registerFormat("xml", readFctn, writeFctn);
qSettings = new QSettings(InternalMapFormat, QSettings::UserScope, "myCompany");
}
// Data zur Anbindung an ein ini-File
Data (const QString& filename) :
qSettings(0)
{
qSettings = new QSettings(filename, QSettings::IniFormat);
}
~Data()
{
delete qSettings;
}
};
bool QtSettings::Data::readFromInternalMap(QIODevice& device, QSettings::SettingsMap& map)
{
Q_UNUSED(device);
map = internalMap;
return true;
}
bool QtSettings::Data::writeToInternalMap(QIODevice& device, const QSettings::SettingsMap& map)
{
Q_UNUSED(device);
internalMap = map;
return true;
}
QtSettings::QtSettings() :
m(0)
{
m = new Data();
}
QtSettings::QtSettings(const QString& filename) :
m(0)
{
m = new Data(filename);
}
QtSettings::~QtSettings()
{
delete m;
}