QSettings на Qt 4.8.4, Mac OS X 10.6.8 не винаги запазва стойности
-
На Mac OS X 10.6.8 с Qt 4.8.4 използвам клас QSettings за съхраняване на някои настройки, но забелязах, че стойностите се запазват само когато затваря програмата с червеното бутонче за затваряне на главния прозорец.
При затваряне на програмата с клавишна комбинация cmd+Q или с Quit от менюто на програмата, стойностите не се запазват, въпреки, че при всички начини на затваряне функцията, която запазва стойностите, се изпълнява.
Това дали не е бъг на Qt 4.8.4?
-
Аз не съм имал подобен проблем. Викаш ли някъде метод за запазване на стойностите? Винаги можеш да прихванеш close event и да запишеш информацията преди затварянето.
Ето как съм направил аз в една моя програма:
@
void calculator::keyPressEvent(QKeyEvent *e) {
switch(e->key()) {
case 16777216:
saveSettings();
hide();
break;
}
}void calculator::changeEvent(QEvent *e)
{
QMainWindow::changeEvent(e);
switch (e->type()) {
case QEvent::LanguageChange:
ui->retranslateUi(this);
break;
case QEvent::Close:
saveSettings();
break;
default:
break;
}
}
@Изпълнява се saveSettings() метода при натискането на Escape (което скрива след това прозореца) или при затваряне на прозореца. Мисля че това ще ти свърши работа, тъй като имаш и keypress евенти и можеш да си добавиш други комбинации ;-)
Потърси повече информация за двата метода. В случая екстендвам QMainWindow. -
[quote author="vanyog" date="1364629143"]
Това дали не е бъг на Qt 4.8.4?
[/quote]Едва ли, но може да провериш в "JIRA":https://bugreports.qt-project.org/secure/IssueNavigator.jspa?mode=show&createNew=true. Според мен е по-добре преди това да последваш съвета на Eus и да провериш обработката на събитията.
-
Здравейте,
Благодаря за отговорите.
Кодът, който пиша може да се види тук:
https://github.com/vanyog/grammar-bg/blob/master/mainform.cppИначе търсенето в https://bugreports.qt-project.org с думи QSettings Mac дава много резултати, в които ми е трудно да се ориентирам.
-
За моя изненада работата се оправи.
Пробвах да компилирам програмата и на Windows. Там всичко със запазването на стойностите работеше, но за да мога да затварям програмата и на Windows с Ctrl+Q, добавих нов ред в менюто: File - Quit, който свързах със слота за затваряне на главния прозорец. После се върнах отново на Mac, компилирах и вече като затварям с cmd+Q, стойностите се запазват. На Mac, обаче, новия ред не се показва в меню File, защото си го има в менюто с името на програмата, както го имаше и преди. -
Имай предвид, че в QSettings има доста сериозен бъг, при който може да ти се загуби цялата информация, поне ако ползваш .ini файл за съхранение. Вероятността е особенно голяма, ако файловата система е с write cache активиран.
Можеш да намериш кръпка тук:
https://bugreports.qt-project.org/browse/QTBUG-21739За съжаление не съм имал време да я подготвя и пусна в Gerrit, пък и знам ли в най-новите версии може и да е оправено.