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, пък и знам ли в най-новите версии може и да е оправено.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.