Как создать QList <QList <QImage>> SourceImageList; в котором каждый QList <QImage> был бы с определённым индексом?

143
01 сентября 2019, 04:20

Мне надо каждому QList ImageList; присвоить определённый индекс ...Для этого я создаю QList <QList <QImage>> SourceImageList; и в цикле пытаюсь добавить значения в этот список :

if (QueryDesk->exec("SELECT desk_id,name_desk FROM tank.desk WHERE ship_id = 3")) {
    int deskCount = 0;
    while (QueryDesk->next())
    {
      if (QueryDeckLayout->exec(QString("SELECT url,name FROM tank.deck_layout WHERE desk_id = %1").arg(QueryDesk->value(0).toString())))
      {
         int countImg=0;
         while (QueryDeckLayout->next())
         {     
            SourceImageList.at(deskCount).value(countImg,shemeImg);
            countImg++;
          }
       }
    }
}

Но у меня возникает ошибка

ASSERT failure in QList<T>::at: "index out of range", file C:\Qt\5.11.0\msvc2017_64\include\QtCore/qlist.h, line 541
Debug Error!

По чему таким образом SourceImageList.at(deskCount).value(countImg,shemeImg); Не получается добавить значения в список и как это можно сделать ? ////////////////////////////////////////////////////////////////////////////////

     if (QueryDesk->exec("SELECT desk_id,name_desk FROM tank.desk WHERE ship_id = 3"))
     {
            int deskCount = 0;
            while (QueryDesk->next())
            {
              if (QueryDeckLayout->exec(QString("SELECT url,name FROM tank.deck_layout WHERE desk_id = %1").arg(QueryDesk->value(0).toString())))
              {
                 int countImg=0;
                 while (QueryDeckLayout->next())
                 {     
                    QImage shemeImg;
                    shemeImg.load(FI.absoluteFilePath());
                    tempSourceImageMap.insert(countImg,shemeImg);
                    countImg++;
                  }
                 SourceImageMap.insert(tankCount,tempSourceImageMap);
               }
             deskCount++;
            }
      }

.... Как теперь пробежаться по значениям SourceImageMap?

for (int i=0;i<SourceImageMap.take(index).size();i++)
{
    SourceImageMap.take(index).take(i);
}

Так не выходит SourceImageMap.take(index).size() всегда равен 0

Answer 1

Вы пытаетесь использовать контейнер не по назначению. Списки на то и списки, чтобы обращаться с ними как со списками. В вашем же случае вам нужен ассоциативный массив, а для этого существует map - его и используйте для таких целей. Правда и там у вас не получится добавлять элементы с помощью at, так как этот метод СПЕЦИАЛЬНО создан для того, чтобы получать СУЩЕСТВУЮЩИЕ элементы, а если таковых нет - бросать исключение.

READ ALSO
Оптимизация и статические функции

Оптимизация и статические функции

Вопрос навеян следующим утверждением:

132
Как оптимизировать рекурсию?

Как оптимизировать рекурсию?

Поднимаясь по лестнице, заяц прыгает либо на следующую ступеньку, либо через одну, либо через двеСколькими способами он может поднятся на ступеньку...

124
Звук и преобразование фурье

Звук и преобразование фурье

У меня есть некий звук с микрофонаЧастота дискретизации 44100

97
RecyclerView не показывает данные из Firebase database

RecyclerView не показывает данные из Firebase database

Уже попробовал разные способы подключения Firebase database к RecyclerView, но каждый раз при запуске приложения он отказывается показывать картинки из хранилищаИ...

121