Can't get QSettings to write my settings properly
-
So I have the tutorial project Notepad. I am trying to use QSettings so that it saves the font,font size and other font related options in a file but it never loads them properly and when I check the config file, the values look quite weird.
void Notepad::saveSettings() { QSettings setting("MyTE","myte"); QFont font = this->font(); setting.beginGroup("MainWindow"); setting.setValue("text.font",font.toString()); setting.setValue("text.font.family",font.family()); setting.setValue("text.font.size",font.pointSize()); setting.setValue("text.font.bold",font.bold()); setting.setValue("text.font.italic",font.italic()); setting.endGroup(); qDebug() << "Saved"; } void Notepad::loadSettings(){ QSettings setting ("Radu","MyTE"); QFont font = setting.value("text.font",QString()).toString(); setting.beginGroup("MainWindow"); QString fontFamily = setting.value("text.font.family",QString()).toString(); int fontSize = setting.value("text.font.size",12).toInt(); setting.setValue("text.font.size",fontSize); //bool fontIsBold = setting.value("text.font.bold",false).toBool(); //bool fontIsItalic = setting.value("text.font.italic",false).toBool(); setFont(font); font.setPointSize(fontSize); setting.endGroup(); qDebug() << "Loaded"; }
I uncommented the bold ones because they simply don't work. I have 2 buttons that correspond to these 2 functions and I also call loadSettings() when the app first starts.
Here is the output in the config file, that never changes and just resets to these weird values.
[MainWindow]
text.font=",9,-1,5,50,0,0,0,0,0"
text.font.bold=false
text.font.family=
text.font.italic=false
text.font.size=9 -
Hi
Its odd it doesn't have a family Qstring.Try to construct a font and save that
QFont::QFont(const QString &family, int pointSize = -1, int weight = -1, bool italic = false)
I mean instead of
QFont font = this->font();Just for test.
-
@radu-m10 said in Can't get QSettings to write my settings properly:
QSettings setting("MyTE","myte");
QSettings setting ("Radu","MyTE");
Maybe you should try with the same values here?
-
@Christian-Ehrlicher Yeah they were the same, same results. The change was because I experimented that
-
Hi,
@radu-m10 said in Can't get QSettings to write my settings properly:
QFont font = setting.value("text.font",QString()).toString();
setting.beginGroup("MainWindow");These two lines are not in the correct order.
Also, your "text.font" content comes from toString so you should use the QFont::fromString method to load these data. -
@SGaist I swapped those lines.
I am sorry I am a complete newbie but I don't really understand the fromString() part. I don't know where and what to replace. Do you mean in the loadSettings function or saveSettings function? I don't know where to call that method. -
Did you read the QFont toString and fromString documentation ?
@SGaist said in Can't get QSettings to write my settings properly:QFont font = setting.value("text.font",QString()).toString();
That's the line I suggest to fix.
-
@SGaist I've read it. I understand what it should do but still I don't exactly know how to implement it. If I just change .toString with .fromString() it doesn't work. Also I don't know where the parameter "&description" should come from. Also, this might fix some things about loading the settings but still, the save function doesn't even change the output of the font size in the config file which is just an integer. It just stays at a default "9".
-
Nowhere was it written that you should change your toString line.
The description is what you stored in the QSettings under "text.font".
-
@SGaist Ok, thanks. I got my head around that. Now I still have the saving issue. Did you spot any mistakes in the save function?
Whenever I hit the save button the settings just revert to default values. Could it be something with "this->font()" ?
If I initialize a font with exact parameters it seems to work. But the save function saves just defaults even if I change the font inside the editor and save afterwards. -
@radu-m10 said in Can't get QSettings to write my settings properly:
QFont font = setting.value("text.font",QString()).toString();
setting.beginGroup("MainWindow");
QString fontFamily = setting.value("text.font.family",QString()).toString();
int fontSize = setting.value("text.font.size",12).toInt();
setting.setValue("text.font.size",fontSize);
//bool fontIsBold = setting.value("text.font.bold",false).toBool();
//bool fontIsItalic = setting.value("text.font.italic",false).toBool();
setFont(font);
font.setPointSize(fontSize);
setting.endGroup();
qDebug() << "Loaded";You should cleanup that function, you call setFont before finishing setting the font's parameters.