crossplatform.ru

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


  Ответ в QMAP
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
ViGOur Дата 6.1.2008, 13:04
 
Цитата(losev @ 6.1.2008, 12:59) *
p/s/ спрашивается нафиг я в школе французский учил !!!
Да ладно, я сам с этим единожды сталкивался и забыл, вот ты мне и напомнил... :)
losev Дата 6.1.2008, 12:59
  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, 12:50
  Насчет странности беру свои слова обратно... :)
Вот описание функции 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:45
  Вижу, в тэге code вижу... :)

И правда странно...
losev Дата 6.1.2008, 12:41
 
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 выводит идентификаторы в условии !!!
но теорию с ошибочными типами сейчас проверю
ViGOur Дата 6.1.2008, 12:34
  Мне кажется что ошибка нет, ты же сам указал:
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:26
  у меня такая проблема, елементы не помешаются в 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++;
      }
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 28.4.2024, 18:00