Найти - Пользователи
Полная версия: Сохранение состояния гуи(qt)
Начало » GUI » Сохранение состояния гуи(qt)
1
Hello_world
Приветствую.

Что есть: гуи, в нем различные опции, которые пользователь может менять. Каждый раз при открытии приложения берутся дефолтные значения.
Вопрос в том, как сохранить значения пользователя и использовать их как дефолтные?

Спасибо за помощь.
mironich
Hello_world
Приветствую.Что есть: гуи, в нем различные опции, которые пользователь может менять. Каждый раз при открытии приложения берутся дефолтные значения.Вопрос в том, как сохранить значения пользователя и использовать их как дефолтные?Спасибо за помощь.
ConfigWriter
Я делал так:
Создал класс который обходит все эл-ты GUI и если у обькта свойство objectName не пустое, записывал это значение в файл, имя опции objectName текущего обьекта.
Метод save который все вышеописанное делал, вызывал в переопределенном методе closeEvent.
А загружал в конструкторе нужного виджета.
KriO
Читайте документацию по QSettings()

В методе CloseEvent() вызываете self.writeSettings()

Вот мой пример:
# процедура сохранения настроек:
    def writeSettings(self):
        settings = QtCore.QSettings("MyDirConfigName", "my_config_file_name")
# координаты окна приложения
        position = self.pos()
# размер окна приложения
        sizeWin = self.size()
        settings.setValue("pos", position)
        settings.setValue("size", sizeWin)
# пример сохраненения размеров частей виджета QSplitter
        settings.setValue("sizeTreeDSplitter", self.split.saveState())
# можно группировать атрибуты для сохранения
# "groupName"  - это имя группы (придумываете своё любое)
        settings.beginGroup("groupName")
# сохраняете в группу то, что нужно, вызывая settings.setValue
            settings.setValue("groupItemName_1", "data_for_saving_1")
#.....
            settings.setValue("groupItemName_2", "data_for_saving_2")
#.....
        settings.endGroup()
#в конструкторе основного класса приложения, например, в QMainWindow() вызываете self.readSettings()
#процедура чтения сохраненных настроек:
    def readSettings(self):
        settings = QtCore.QSettings("MyDirConfigName", "my_config_file_name")
# координаты окна приложения
        position = settings.value("pos", QtCore.QPoint(400, 400))
        self.move(position)
# размер окна приложения
        sizeWin = settings.value("size", QtCore.QSize(1000, 900))
        self.resize(sizeWin)
# пример чтения сохраненных размеров частей в QSplitter
        sizeTreeDSplitter = settings.value("sizeTreeDSplitter", QtCore.QByteArray())
        self.split.restoreState(sizeTreeDSplitter)
# пример чтения из группы
        settings.beginGroup("groupName")
            self.value1 = settings.value("groupItemName_1", "default_data_1"))
#.... используете прочитанное значение self.value1 как вам надо
            self.value2 = settings.value("groupItemName_2", "default_data_2"))
#....
         settings.endGroup()
KriO
в первый раз пишу сюда код, все отступы поехали
ну разберётесь наверно
reclosedev
Qt и сам прекрасно справляется.
Для QMainWindow:
    def read_settings(self):
        self.layoutSettings = QSettings(os.path.join(settings_path(), "./layout.ini"), QSettings.IniFormat)
        self.restoreGeometry(self.layoutSettings.value("mainWindow/geometry"))
        self.restoreState(self.layoutSettings.value("mainWindow/windowState"))
 
    def save_settings(self):
        self.layoutSettings.setValue("mainWindow/geometry", self.saveGeometry())
        self.layoutSettings.setValue("mainWindow/windowState", self.saveState())
        self.layoutSettings.sync()
http://doc.qt.digia.com/qt/qwidget.html#saveGeometry
http://doc.qt.digia.com/qt/qwidget.html#restoreGeometry
http://doc.qt.digia.com/qt/qmainwindow.html#saveState
http://doc.qt.digia.com/qt/qmainwindow.html#restoreState
Hello_world
Спасибо за помощь! Но вопросы ещё остались(непонятна мне документация по Qsettings).
KriO, допустим у меня есть checkbox, по дефолту он в состоянии checked, но пользователь изменил это, непонятно как реализовать, чтобы при следующем запуске состояние было non-checked. Про размеры вроде все понятно.
KriO
Допустим, есть
self.chB = QtGui.QCheckBox(“Some CheckBox”)
self.chB.setChecked(True)

В методе read_settings() из выше приведенных примеров пишем:
chBoxState = settings.value('chBoxState', QtCore.Qt.Checked)
self.chB.setCheckState(int(chBoxState))

В методе writeSettings() пишем:
settings.setValue('chBoxState', self.chB.checkState())


This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB