Название: Автоматизация сохранения настроек Отправлено: Student1995 от Ноябрь 24, 2013, 00:38 Здравствуйте.
При работе над проектом возникла задача сохранения большого числа настроек. Как можно грамотно решить эту задачу? Может быть, можно как-то обойти все элементы формы с настройками и записывать содержимое элемента в файл настроек? Не писать же вручную ключ-значение для каждой настройки. Название: Re: Автоматизация сохранения настроек Отправлено: gil9red от Ноябрь 24, 2013, 02:58 Удобно использовать этот класс: QSettings (http://qt-project.org/doc/qt-4.8/qsettings.html#details)
Можно и в базе данных хранить QtSql (http://doc.crossplatform.ru/qt/4.5.0/qtsql.html) :) Сохранение/загрузка состояния toolbars и dockwidgets (используется в QMainWindow): http://qt-project.org/doc/qt-4.8/qmainwindow.html#saveState http://qt-project.org/doc/qt-4.8/qmainwindow.html#restoreState Сохранение/загрузка положения на экране и размера: http://qt-project.org/doc/qt-4.8/qwidget.html#saveGeometry http://qt-project.org/doc/qt-4.8/qwidget.html#restoreGeometry Название: Re: Автоматизация сохранения настроек Отправлено: ViTech от Ноябрь 24, 2013, 11:09 А где и как в программе хранится это большое число настроек? И как разные части программы получают к ним доступ?
Название: Re: Автоматизация сохранения настроек Отправлено: Student1995 от Ноябрь 24, 2013, 12:39 А где и как в программе хранится это большое число настроек? И как разные части программы получают к ним доступ? Настройки у меня должны записываться в ini файл в форме ключ-значение. В основном, значения будут браться из QLineEdit-ов.Мне интересно, есть ли способ сохранить настройки с использованием минимума кода. То есть чтобы я НЕ прописывал settings.setValue(<ключ>,<значение>) для каждой настройки, а это происходило как-то автоматически. Можно ли так сделать? Или только вручную все прописывать? Название: Re: Автоматизация сохранения настроек Отправлено: Bepec от Ноябрь 24, 2013, 12:41 Тупо возьми функцию и в ней пройдись по lineEdit'ам.
Название: Re: Автоматизация сохранения настроек Отправлено: Student1995 от Ноябрь 24, 2013, 13:09 Тупо возьми функцию и в ней пройдись по lineEdit'ам. А можно небольшой пример кода? Чтобы посмотреть, какой принцип работы будет у функции. Форма у меня создана в дизайнере. Название: Re: Автоматизация сохранения настроек Отправлено: ViTech от Ноябрь 24, 2013, 13:39 У QObject есть метод
Цитировать QList<T> QObject::findChildren (http://qt-project.org/doc/qt-4.8/qobject.html#findChildren) ( const QString & name = QString() ) const С помощью него можно получить список всех эдитов на форме:Код Пройдясь по этому списку, можно в файл сохранять objectName() и text() эдита. Только туда могут попасть эдиты, которые не надо сохранять. Потом еще потребуется сохранять QComboBox, QRadioButton и пр. В общем, хранить настройки в виджетах формы не самая лучшая идея :). Хотя в начале многие пытаются так делать. Настройки, как правило, являются свойствами какого-то объекта, оттуда их и надо брать. Или воспользоваться QSettings, как глобальным объектом для настроек. Название: Re: Автоматизация сохранения настроек Отправлено: Student1995 от Ноябрь 25, 2013, 01:19 Теперь понял. А можно еще узнать, как правильно получить текст lineEdit-а? Прикладываю пример нерабочего пример кода, при его выполнения программа "падает". Что не так, пока что не пойму...
Код: QList<QLineEdit*> allEdits = MainWindow().findChildren<QLineEdit*>(); Название: Re: Автоматизация сохранения настроек Отправлено: kambala от Ноябрь 25, 2013, 01:35 MainWindow() создает новый временный объект, а тебе нужно обращаться к существующему (как правило this, если вызываешь внутри класса). думаю вывод сделаешь сам.
пробегаться по контейнерам проще через Qt-шный foreach или C++11-ый for each. Название: Re: Автоматизация сохранения настроек Отправлено: Student1995 от Ноябрь 25, 2013, 18:10 Теперь разобрался. Спасибо всем за помощь :)
|