В общем пишу автоматический сохранитель конфига, тоесть указываешь QWidget он по дереву его детей проходит, и пишет значение из QLineEdit и подобных в файл, все написал кроме установки обратно этого значения которое было в ini файл записано, QObjectName не предлагать, его надо есче установить.
Надо какой то идентификатор уникальный, для QWiget что-то типа хэндла, только неизменяемого после перезапуска программы. Вариант, но если будет добавлен виджет между старыми виджетами, будет каша. Сейчас использую objectName свойство, но в ручную его прописывать долго, и не практично.
Мы наверно друг друга не до понимаем, я спрашиваю о том как получить идентификатор QWidget, тоесть тоже что и objectName но то что ставиться автоматически.
Возможно, просто сложности тут не вижу. Также проходишься потом по дереву, и устанавливаешь значения из файла. Получаешь всех детей, проходишься собираешь значения, сохраняешь в файл xml также как и древо, затем проходишься по xml файлу и раздаешь значения всему древу. Получай с помощью QObject::metaObject () указатели на метаобъекты... (P.S. если опять не так понял, можно подробнее с кодом желательно.)
Был такой вариант, но! Если добавить виджет на форму, дерево измениться. Вот мой быдло код: Code: class ConfigWriter(): ''' Класс реализует запись в .ini файл, содержание следующих виджетов: QLineEdit, QSpinBox, QComboBox У виджетов чье значение необходимо записать в .ini файл, метод getObjectName() должен возвращать не пустую строку. Методы: ''' def __init__(self, parent): ''' __init__(parent) -> ConfigWriter Ключевые аргументы: parent - Главный виджет окна настройки которого надо записать. ''' self._parent = parent self._val_hash = {} def _list_and_get(self, listen_obj): ''' Ключевые аргументы: listen_obj - Обьект дочерние виджеты которого будут рекурсивно пройдены. Рекурсивно обходит обьект указанный в listen_obj, и записывает его значения в атрибут _val_hash. ''' for obj in listen_obj.children(): if not obj.objectName().isEmpty(): self._val_hash[str(obj.objectName())] = \ self._get_val(obj) if isinstance(obj, QLayout)\ or isinstance(obj, QGroupBox): self._list_and_get(obj) def _list_and_set(self, listen_obj): ''' Ключевые аргументы: listen_obj - Обьект дочерние виджеты которого будут рекурсивно пройдены. Рекурсивно обходит обьект указанный в listen_obj, и устанавливает ему значения из _val_hash. ''' for obj in listen_obj.children(): key = str(obj.objectName()) if self._val_hash.has_key(key): #Костыль для записи unicode строк if self._val_hash[key][0] == 'u': self._val_hash[key] = eval( self._val_hash[key] ) self._set_val(obj, self._val_hash[key]) if isinstance(obj, QLayout)\ or isinstance(obj, QGroupBox): self._list_and_set(obj)