Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > [Qt4]не сохраняются настройки приложения


Автор: anatox91 21.7.2008, 19:35
собственно сабж. раньше как-то пробовал использовать QSettings, все нормально работало, а вот сейчас почему-то не работает. В классе главного окна объявлено:
Код

private:
           QSettings settings;

Затем в конструкторе инициализируется:
Код

MainWindow::MainWindow() : ..., settings(QSettings::NativeFormat, QSettings::UserScope, QString("ProgStudio"), progname) { //progname - это QString с названием программы
//...
}

Также есть две функции:
Код

void MainWindow::writeSettings() {
     settings.beginGroup("/MainWindow");
     settings.setValue("/pos", this->pos());
     settings.setValue("/size", this->size());
     settings.setValue("/splitter", splitter->saveState());
     //...
     settings.endGroup();
     //...
}
void MainWindow::readSettings() {
     settings.beginGroup("/MainWindow");

     QPoint point = settings.value("/pos", QPoint(0, 0)).toPoint();
     if((point.x() > 0 && point.x() < 1024) && (point.y() > 0 && point.y() < 768)) move(point);

     QSize size = settings.value("/size", QSize(800, 550)).toSize();
     if((size.width() > 0 && size.width() < 1024) && (size.height() > 0 && size.height() < 768)) resize(size);

     splitter->restoreState(settings.value("/splitter").toByteArray());
     //...
     settings.endGroup();
     //...
}

readSettings() используется в конструкторе, а writeSettings() в деструкторе:
Код

MainWindow::~MainWindow() {
                          writeSettings();
}

но все это почему-то не работает :( все время используются значения по умолчанию...
подскажите пожалуйста в чем проблема

Автор: SABROG 21.7.2008, 22:25
А если все-таки перенести метод writeSettings() из деструктора в closeEvent() как предлагают тролли ?

Автор: anatox91 22.7.2008, 10:02
SABROG, хм... так заработало, спасибо. Но не понимаю все-таки почему раньше работало и в деструкторе, а сейчас не хочет...
Цитата(SABROG @  21.7.2008,  22:25 Найти цитируемый пост)
как предлагают тролли ?

а где предлагают? можешь дать ссылку, чтоб почитать поподробнее?

Автор: SABROG 22.7.2008, 10:35
Цитата(anatox91 @ 22.7.2008,  10:02)
SABROG, хм... так заработало, спасибо. Но не понимаю все-таки почему раньше работало и в деструкторе, а сейчас не хочет...
Цитата(SABROG @  21.7.2008,  22:25 Найти цитируемый пост)
как предлагают тролли ?

а где предлагают? можешь дать ссылку, чтоб почитать поподробнее?

Может быть из-за последовательности вызовов деструкторов, главный объект уничтожается последним. Хотя в таком случае появился бы AV, надо смотреть отладчиком.

Предлагают они в ассистанте, вернее не то чтобы предлагают, просто используют и о деструкторе там ни слова.

Автор: Любитель 22.7.2008, 12:55
Возвможно, деструктор МейнВиндоу вызывается после деструктора QApplication - в результате чего дальнейшие функционирование большинства элементов фреймворка Qt невозможно.

Автор: Remiznik 22.7.2008, 18:30
я в Qt4 не силён !! но в 3 можно было задать фаел куда записываются настройки !!! попробуй в фаел загнать и постомтри в чём проблема не сохраняет или не читает настройки ..... легче будет отследить неполадку !

Автор: anatox91 22.7.2008, 21:04
Remiznik, проблема вообще-то уже решена, и скорее всего заключалась в том, что сказал Любитель

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)