crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> QMAP, не помещаются элементы
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:34
Сообщение #2


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

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

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




Репутация:   40  


Мне кажется что ошибка нет, ты же сам указал:
if (item->type()==Arrow::Type)
{
   ArrowList.insert(qgraphicsitem_cast<Arrow*>(item)->startItem()->retId(),
   qgraphicsitem_cast<Arrow *>(item)->endItem()->retId()
);
Значит из 5 элементов имеют тип Arrow::Type только 3.


p.s. пользуйся тэгом коде, код читабельней будет :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
losev
  опции профиля:
сообщение 6.1.2008, 12:41
Сообщение #3


Студент
*

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

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




Репутация:   0  


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";
    }
}

cout выводит идентификаторы в условии !!!
но теорию с ошибочными типами сейчас проверю

Сообщение отредактировал losev - 6.1.2008, 12:44
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 6.1.2008, 12:45
Сообщение #4


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

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

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




Репутация:   40  


Вижу, в тэге code вижу... :)

И правда странно...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 6.1.2008, 12:50
Сообщение #5


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

Группа: Модератор
Сообщений: 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
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
losev
  опции профиля:
сообщение 6.1.2008, 12:59
Сообщение #6


Студент
*

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

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




Репутация:   0  


1 - 2
1 - 3
1 - 4
2 - 4
4 - 3
key=1 value=4
key=1 value=3
key=1 value=2
key=2 value=4
key=4 value=3

все заработало , спасибо, без тебя еще фиг знает сколько бы секасом занимался !

p/s/ спрашивается нафиг я в школе французский учил !!!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 6.1.2008, 13:04
Сообщение #7


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

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

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




Репутация:   40  


Цитата(losev @ 6.1.2008, 12:59) *
p/s/ спрашивается нафиг я в школе французский учил !!!
Да ладно, я сам с этим единожды сталкивался и забыл, вот ты мне и напомнил... :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 20.12.2024, 21:30