Название: QHash<QString, QHash<QString, ServerSocket *>* > Отправлено: dercas от Декабрь 03, 2012, 14:28 Здравствуйте, подскажите как правильно сделать.
Пытаюсь сделать каналы в чате, с помощью QHash. Где QMultiHash<Название канала, QHash<Ник, ServerSocket *>*> Здесь содержатся все ники и сокеты. Код: QHash<QString, ServerSocket *> nick_list; При входе на канал, ссылку на этот один ник и сокет, надо засунуть в хэш значения этого канала, что и не получается сделать... но если вставлять ссылку на хэш всех ников, отлично работает.. Код:
но тогда в хэше канала получаются все ники, а нужно именно те кто на канале. Название: Re: QHash<QString, QHash<QString, ServerSocket *>* > Отправлено: mutineer от Декабрь 03, 2012, 15:37 Цитировать что и не получается сделать... А более полезное описание проблемы есть? Название: Re: QHash<QString, QHash<QString, ServerSocket *>* > Отправлено: dercas от Декабрь 03, 2012, 16:10 Цитировать что и не получается сделать... А более полезное описание проблемы есть? Проблема в том, что я не знаю, как сделать указатель на один элемент хеша, и засунуть его (ссылку) в другой хэш. И правда сложновато объяснить.. Название: Re: QHash<QString, QHash<QString, ServerSocket *>* > Отправлено: mutineer от Декабрь 03, 2012, 16:42 Что значит "не получается"? Не можешь набрать, потому что клавиатура не работает? Не собирается? Вылетает? Пустой хеш получается?
Название: Re: QHash<QString, QHash<QString, ServerSocket *>* > Отправлено: dercas от Декабрь 03, 2012, 17:35 Что значит "не получается"? Не можешь набрать, потому что клавиатура не работает? Не собирается? Вылетает? Пустой хеш получается? Не получается, потому что не знаю как сделать. Несколько дней искал ответ в гугле, но безрезультатноНазвание: Re: QHash<QString, QHash<QString, ServerSocket *>* > Отправлено: carrygun от Декабрь 04, 2012, 05:22 Может лучше будет QHash<QString, QPair<QString, ServerSocket*> >? Потом можно будет по имени канала достать всех пользователей.
Название: Re: QHash<QString, QHash<QString, ServerSocket *>* > Отправлено: Igors от Декабрь 04, 2012, 13:35 Я также не понял что же не получается у автора темы :)
Код: QHash<QString, ServerSocket *> nick_list; Код:
Конструкция "хеш на хеш" почти всегда неудачна/неудобна Название: Re: QHash<QString, QHash<QString, ServerSocket *>* > Отправлено: dercas от Декабрь 07, 2012, 11:14 пробую использовать QMap< QString, QMap<QString, const QString *> > map;
Код:
Пытаюсь передать в map ссылку на ключ, который в QHash. В temp ссылка вроде заносится, как видно на рисунке. А в map нет. Если передавать ссылку не на ключ, а на сокет, то работает. Сильно не ругайте, с qt мало знаком.. Название: Re: QHash<QString, QHash<QString, ServerSocket *>* > Отправлено: Igors от Декабрь 07, 2012, 15:49 Код:
2) Откуда уверенность что адрес key() никогда не изменится? QHash может перераспределить элементы и указатель в map станет невалидным. Храните в контейнерах лишь те указатели что железно не изменятся, напр QWidget *, ServerSocket * Сильно не ругайте, с qt мало знаком.. Вы говорите внятно где проблема, а то "не работает", а что - хз. Это неясно из Ваших постов, а когда Вас спросили - не ответили. |