Russian Qt Forum
Ноябрь 24, 2024, 03:29 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: Динамически определить тип объекта?  (Прочитано 14417 раз)
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #15 : Январь 15, 2012, 13:22 »

А если вариант не привязываться к типу, а только имени объекта (тобишь должны быть уникальны):
И так, у нас есть у Qwidget N стандартных свойств + у каждого есть свои M, итого N + M свойств. Все сразу предусмотреть не реально, да и не нужно в принципе что-то знать о них.
а ведь точно, многие вещи там уже являются свойствами, а я выдумывал такие костыли Улыбающийся
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
popper
Гость
« Ответ #16 : Январь 15, 2012, 22:25 »

Предлагаю дополнить (немного изменить) код, который предложил fuCtor

сохранение:
Код
C++ (Qt)
  ....
for(int i = 0; i < count; ++i)
{
QMetaProperty prop = metaObj_->property(i);
                 // сохраняем только свойства, которые пользователь может редактировать
 
                     if ( prop.isUser() )
        settings->setValue(QString::fromLatin1(prop.name()), prop.read(obj));
}
settings->endGroup();
return true;
}
 

восстановление
Код
C++ (Qt)
bool restoreSettings(QObject * obj, QSettings *settings)
{
  ....
          for(int i = 0; i < count; ++i)
{
QMetaProperty prop = metaObj_->property(i);
 
                      if ( prop.isUser() ){
                            // если в настройках свойства для данного объекта нет, нужно оставить текущее
 
                                    QVariant v = settings->value(QString::fromLatin1(prop.name()), prop.read(obj));
              prop.write(obj, v));
                     }
 
}
settings->endGroup();
return true;
}
« Последнее редактирование: Январь 15, 2012, 22:29 от popper » Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.234 секунд. Запросов: 22.