Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > вектор в списке


Автор: gordmiand 11.8.2012, 00:13
Код

typedef QMultiMap<unsigned short, void*> MMap;
MMap objMMap;

QVector <A1> objVector;

for (int i=0; i<5; i++)
{
A1 objA1; // объект некоего класса A1
//Заполнение objA1 разными значениями;
objVector.append(objA1);
}

objMMap.insert(0x10, (void*)& objVector );
objMMap.insert(0x14, (void*)&objA2); // objA2 - объект некоего класса A2
objMMap.insert(0x19, (void*)&objA3); // objA2 - объект некоего класса A3 

 
emit sig1(objMMap);

//connect sig1 и slot1
// objVector.clear();

void Klass2::slot1(MMap MyMap)
{
MyMap.values(0x10); вернет список значений  всех 0x10-ключей (этот список будет из одного элемента - вектора с элементами типа A1)
А как мне сосчитать (допустим в локальный же объект (или указатель) класса A1) содержимое, например, 2-го элемента (объекта класса А1) вектора (то есть как правильно обратиться к заданному элементу вектора, который (т.е. вектор) является элементом списка)?
}


Автор: gordmiand 13.8.2012, 21:29
...уже всякие варианты перепробовал...ну подскажите пож-та как правильно достать значение какого-либо элемента вектора, который сам является элементом списка?

Автор: borisbn 14.8.2012, 08:32
QMultiMap::values() возвращает QList значений. Чтобы получить все значения по-очереди делаешь:
Код
QList< void* > values_for_0x10 = objMMap.values( 0x10 );
for ( int i = 0; i < values_for_0x10.size(); i++ ) {
    void * p = values_for_0x10.at( i );
    // дальше делаешь с p что хочешь
}

Как говорится в известном анекдоте, но есть один нюанс...
Что ты будешь делать с void * ? Как узнаешь, что это был за указатель ?
Вообще очень, очень и очень плохой метод - преобразовывать типизированные указатели к void *

Автор: bsa 15.8.2012, 11:03
Цитата(borisbn @  14.8.2012,  09:32 Найти цитируемый пост)
Вообще очень, очень и очень плохой метод - преобразовывать типизированные указатели к void * 

Уж лучше тогда для всех классов сделать одного общего предка с виртуальным пустым деструктором, а потом через dynamic_cast кастить указатели до потомков. Это значительно безопасней.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)