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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Статический QHash для множества объектов одного класса  (Прочитано 2183 раз)
Fregloin
Супер
******
Offline Offline

Сообщений: 1025


Просмотр профиля
« : Июнь 13, 2014, 14:09 »

Привет. Как сделать статический QHash<QString,QString>(например) для множества объектов одного класса.

Допустим сделал так:

Код:
class MyClass {
 static QHash<QString,QString> staticHash;
}

Как его инициализировать и где?

Сейчас подход такой (понимаю что говнокод)
Код:
void CDKSwitchState::parseState(const QJsonValue & jsonValue)
{
    CRailObjectState::parseState(jsonValue);

    if(!jsonValue.isObject())
        return;

    QJsonObject jsonObject = jsonValue.toObject();

    QString valueS;

    if(myjson_read_string_value(jsonObject,propname_s_fact_no_pos,valueS))
    {
        static  QHash<QString,LongAbsentPositionState>  lapsHash;
        if(lapsHash.isEmpty())
        {
            lapsHash[valuename_s_fact_no_pos_unchecked_pos]=lapsUnchecked;
            lapsHash[valuename_s_fact_no_pos_checked_pos]=lapsChecked;
        }
        updateStateProperty(prop_long_absent_position_state,lapsHash.value(valueS,lapsOk));
    }

}
Т.е. использую статический хеш в функции, но понимаю что это далеко не лучшее решение. Экземпляров много, но все должны обращаться к хешу на чтение.
Записан
Johnik
Крякер
****
Offline Offline

Сообщений: 339


Просмотр профиля
« Ответ #1 : Июнь 13, 2014, 20:59 »

В Qt 5 есть макросы Q_GLOBAL_STATIC и Q_GLOBAL_STATIC_WITH_ARGS, можно воспользоваться ими или посмотреть их реализацию.
В Qt 4 они есть тоже, но там они не документированы.

Как вариант, воспользоваться синглетонами, очень хорошо и подробно они описаны у Александреску.
« Последнее редактирование: Июнь 13, 2014, 21:12 от Johnik » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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