crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

losev
  опции профиля:
сообщение 6.1.2008, 12:26
Сообщение #1


Студент
*

Группа: Новичок
Сообщений: 10
Регистрация: 15.12.2007
Пользователь №: 47

Спасибо сказали: 0 раз(а)




Репутация:   0  


у меня такая проблема, елементы не помешаются в QMAP хотя они есть:

суть такая есть поле (QGraphicsScene) на нем изображаются элементы (подразумевается графическое представление коммутаторов)
между собой они соединены линиями, так вот всю эту карту нужно сохранять в файл, с коммутаторами проблем не было а вот
со стрелочками возникли.
Каждый коммутатор на карте имеет свой уникальный ID, стрелочки строятся по такому алгоритму
startId и до endId те в цифровом эквиваленте грубо говоря координаты стрелок к примеру
1-2
1-4
1-5
2-5
те стрелка ведется от коммуттора с ИД равным 1 и к 2 и тд
в QMap я сохраняю сответсвенно эти идентификаторы
QMap <ИД_начального_коммутатора,ИД_конечного_коммутатора>,
так вот при обходе цикла foreach по всем элементам поля идентификаторы выдаются как надо
но почему то в QMAP они все не сохроняются
вот данные из консоли:
--------------------------------------------------------
ARROW LIST обход цикла foreach для поиска идентификаторов стрелок
1 - 2
1 - 3
1 - 4
2 - 4
4 - 3
key=1 value=4
key=2 value=4
key=4 value=3
те мы видим количество стрелок 5 при обходе foreach а в QMAP их всего 3 записи !
или я не понимаю логику работы QMAP или какая то магическая ошибка )))
---------------------------------------------------------
 QMap <int,int>ArrowList;

  cout<<"ARROW LIST обход цикла foreach для поиска идентификаторов стрелок\n";

    foreach (QGraphicsItem *item,Map->items())
     {
        if (item->type()==Arrow::Type)
         {
          ArrowList.insert(qgraphicsitem_cast<Arrow*>(item)->startItem()->retId(),
                           qgraphicsitem_cast<Arrow *>(item)->endItem()->retId()
                          );
             cout<<qgraphicsitem_cast<Arrow*>(item)->startItem()->retId()<<" - ";

             cout<<qgraphicsitem_cast<Arrow*>(item)->endItem()->retId()<<"\n";
         }
      }

..........................................
      QMap<int,int>::const_iterator it = ArrowList.constBegin();
      while (it != ArrowList.constEnd())
      {
              cout <<"key="<<it.key()<<" "<<"value="<<it.value()<<"\n";
              it++;
      }


Сообщение отредактировал Сафи - 6.1.2008, 12:43
Причина редактирования: добавлен тэг [code]
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
ViGOur
  опции профиля:
сообщение 6.1.2008, 12:50
Сообщение #2


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Насчет странности беру свои слова обратно... :)
Вот описание функции QMap::insert:
Цитата
iterator QMap::insert ( const Key & key, const T & value )

Inserts a new item with the key key and a value of value.

If there is already an item with the key key, that item's value is replaced with value.

If there are multiple items with the key key, the most recently inserted item's value is replaced with value.
тоесть, существующие значение просто напросто меняется, а не добавляется, ключ должен быть вроде как уникальным значенияем! :)

Используй insertMulti

Сообщение отредактировал ViGOur - 6.1.2008, 12:52
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 22.6.2025, 10:58