Save values to a config file
-
Hi, sorry for the late response. I was away for about 3 hours, but I'm back now.
I've tried the settings.isWritable() but that didn't work.
I also didn't understand the QSettings::status(). Could you give me an example please? -
Hi, sorry for the late response. I was away for about 3 hours, but I'm back now.
I've tried the settings.isWritable() but that didn't work.
I also didn't understand the QSettings::status(). Could you give me an example please?@Sucharek said in Save values to a config file:
I've tried the settings.isWritable() but that didn't work.
It's not supposed to "make it work"! It's supposed to tell you why it likely isn't working.
We're trying to tell you that you cannot save settings to a resource file.
-
Ok, here's the output:
I've also added:qDebug() << "Settings status: " << settings.status();
Which is the "Settings status: ".
@Sucharek
So it isn't writeable. Which we already know, because resource files are not writeable. You cannot set settings in a resource file. That's the answer.Hi, I want to save some variable values into a config file.
I tried doing it with QSettings and resources, but it doesn't seem to work.
Yes, it does not work.
-
Hi,
If you properly configure your QApplication, QSettings will by default store your settings in the appropriate location for the OS your application runs on.
If you really want to have a file, then use QStandardPaths to query a suitable folder.
-
As was already explained several times by my fellows on this thread: you cannot write in the resources.
These are read-only data embedded in your executable.
-
As was already explained several times by my fellows on this thread: you cannot write in the resources.
These are read-only data embedded in your executable.
-
Where do you want to store your configuration ?
-
-
Well, I'm building the app for an Android device, so I would put it to: /data/data/org.qtproject.example.clicker/
if reading/writing to that folder isn't possible (without root), I would put it to:
/sdcard/Android/data/org.qtproject.example.clicker/I actually have a ini file that I ship in one of my applications with the resource system. On startup I check, if my ini file exists in the relating appdata system.
If not I copy it from the resources.This is made for Windows, but since its Qt, it should work just as well for Android.
Here are the bare bone functions:
//From to create class PreAppTasks: void PreAppTasks::copyIniToDestDir() { QFile *destFile = getDestIniFile(); //QFile *orgFile = getOrgIniFile(); //in your case simply: QFile *orgFile = new File(":/config/config.ini"); if(orgFile){ if(destFile && destFile->exists()){ //Both Files exists: implement your logic, for this case here } else { //DestFile does not exist (propably the first program execution) -> simply copy from install folder //But first, create the folder, if it does not exist QFileInfo info(destFile->fileName()); info.setFile(info.absolutePath()); if(!info.exists()){ QDir d; d.mkpath(info.absoluteFilePath()); } orgFile->copy(destFile->fileName()); } } if(destFile){ destFile->deleteLater(); destFile = nullptr; } if(orgFile){ orgFile->deleteLater(); orgFile = nullptr; } } QFile *PreAppTasks::getDestIniFile() { //in your case: return new QFile(QStandardPaths::writableLocation(QStandardPaths::AppDataLocation) + QString("/config/config.ini")); } //In main.cpp (AFTER application instance creation!) int main(int argc, char *argv[]) { QGuiApplication a(argc, argv); PreAppTasks::copyIniToDestDir(); .... return a.exec(); }
-
I actually have a ini file that I ship in one of my applications with the resource system. On startup I check, if my ini file exists in the relating appdata system.
If not I copy it from the resources.This is made for Windows, but since its Qt, it should work just as well for Android.
Here are the bare bone functions:
//From to create class PreAppTasks: void PreAppTasks::copyIniToDestDir() { QFile *destFile = getDestIniFile(); //QFile *orgFile = getOrgIniFile(); //in your case simply: QFile *orgFile = new File(":/config/config.ini"); if(orgFile){ if(destFile && destFile->exists()){ //Both Files exists: implement your logic, for this case here } else { //DestFile does not exist (propably the first program execution) -> simply copy from install folder //But first, create the folder, if it does not exist QFileInfo info(destFile->fileName()); info.setFile(info.absolutePath()); if(!info.exists()){ QDir d; d.mkpath(info.absoluteFilePath()); } orgFile->copy(destFile->fileName()); } } if(destFile){ destFile->deleteLater(); destFile = nullptr; } if(orgFile){ orgFile->deleteLater(); orgFile = nullptr; } } QFile *PreAppTasks::getDestIniFile() { //in your case: return new QFile(QStandardPaths::writableLocation(QStandardPaths::AppDataLocation) + QString("/config/config.ini")); } //In main.cpp (AFTER application instance creation!) int main(int argc, char *argv[]) { QGuiApplication a(argc, argv); PreAppTasks::copyIniToDestDir(); .... return a.exec(); }
-
@J-Hilk said in Save values to a config file:
//In main.cpp (AFTER application instance creation!)
int main(int argc, char *argv[])
{
QGuiApplication a(argc, argv);
PreAppTasks::copyIniToDestDir();
....
return a.exec();
}