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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QHash<QString, QHash<QString, ServerSocket *>* >  (Прочитано 4508 раз)
dercas
Гость
« : Декабрь 03, 2012, 14:28 »

Здравствуйте, подскажите как правильно сделать.
Пытаюсь сделать каналы в чате, с помощью QHash.
Где QMultiHash<Название канала, QHash<Ник, ServerSocket *>*>

Здесь содержатся все ники и сокеты.
Код:
QHash<QString, ServerSocket *> nick_list;
nick_list.insert(nick, socket);

При входе на канал, ссылку на этот один ник и сокет, надо засунуть в хэш значения этого канала, что и не получается сделать...
но если вставлять ссылку на хэш всех ников, отлично работает..
Код:
  
QMultiHash<QString, QHash<QString, ServerSocket *>* > channel_list;
channel_list.insert(name_channel, &nick_list);

но тогда в хэше канала получаются все ники, а нужно именно те кто на канале.
« Последнее редактирование: Декабрь 03, 2012, 14:49 от dercas » Записан
mutineer
Гость
« Ответ #1 : Декабрь 03, 2012, 15:37 »

Цитировать
что и не получается сделать...

А более полезное описание проблемы есть?
Записан
dercas
Гость
« Ответ #2 : Декабрь 03, 2012, 16:10 »

Цитировать
что и не получается сделать...

А более полезное описание проблемы есть?

Проблема в том, что я не знаю, как сделать указатель на один элемент хеша, и засунуть его (ссылку) в другой хэш. И правда сложновато объяснить..
Записан
mutineer
Гость
« Ответ #3 : Декабрь 03, 2012, 16:42 »

Что значит "не получается"? Не можешь набрать, потому что клавиатура не работает? Не собирается? Вылетает? Пустой хеш получается?
Записан
dercas
Гость
« Ответ #4 : Декабрь 03, 2012, 17:35 »

Что значит "не получается"? Не можешь набрать, потому что клавиатура не работает? Не собирается? Вылетает? Пустой хеш получается?
Не получается, потому что не знаю как сделать. Несколько дней искал ответ в гугле, но безрезультатно
Записан
carrygun
Гость
« Ответ #5 : Декабрь 04, 2012, 05:22 »

Может лучше будет QHash<QString, QPair<QString, ServerSocket*> >? Потом можно будет по имени канала достать всех пользователей.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #6 : Декабрь 04, 2012, 13:35 »

Я также не понял что же не получается у автора темы  Улыбающийся
Код:
QHash<QString, ServerSocket *> nick_list;
nick_list.insert(nick, socket);
Код:
  
QMultiHash<QString, QHash<QString, ServerSocket *>* > channel_list;
channel_list.insert(name_channel, &nick_list);
Если понимать это как рабочий код - то локальный nick_list будет удален и указатель в channel_list станет невалиден. Ну может это для примера - хз

Конструкция "хеш на хеш" почти всегда неудачна/неудобна
Записан
dercas
Гость
« Ответ #7 : Декабрь 07, 2012, 11:14 »

пробую использовать QMap< QString, QMap<QString, const QString *> > map;

Код:
  
  QHash<QString, ServerSocket *> nick_list;
  nick_list.insert(nick, socket);


//Функция:
  QHash<QString, ServerSocket *>::iterator i = peers.find(nick);
  const QString *temp = &i.key();
  map[ nam ][ p ] = &i.key();

Пытаюсь передать в map ссылку на ключ, который в QHash. В temp ссылка вроде заносится, как видно на рисунке. А в map нет.
Если передавать ссылку не на ключ, а на сокет, то работает.
Сильно не ругайте, с qt мало знаком..
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #8 : Декабрь 07, 2012, 15:49 »

Код:
  
  QHash<QString, ServerSocket *>::iterator i = peers.find(nick);
  const QString *temp = &i.key();
1) А если find выдаст end() ?
2) Откуда уверенность что адрес key() никогда не изменится? QHash может перераспределить элементы и указатель в map станет невалидным. Храните в контейнерах лишь те указатели что железно не изменятся, напр QWidget *, ServerSocket *

Сильно не ругайте, с qt мало знаком..
Вы говорите внятно где проблема, а то "не работает", а что - хз. Это неясно из Ваших постов, а когда Вас спросили - не ответили.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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