Добавить структуру (и) в QList в цикле for - PullRequest
0 голосов
/ 24 октября 2019

Я заполняю структуру в цикле, и для каждого цикла я хочу иметь новый экземпляр (копию) в Qlist этого экземпляра.

Я считываю данные из файла (xml) и сохранюданные в этом списке QList.

После например. 4 цикла, QList содержит только одну структуру ...

typedef struct structure_Anf
{

public:

    typedef struct structure_Art
    {
    public:
        QString Art = "";
    }
    structure_Art_t;

    QString Num = "";

    QList <structure_Art_t> ArtList;

}
structure_Anf_t;


QList <structure_Anf_t> FullAnfList; // holds the full list of structures

structure_Anf_t struc_act_Anf; // holding actual used instance of structure



void test
{

    for ( int i=0; i < 5; i++) // add some data
    {
        struc_act_Anf = {};

        struc_act_Anf.Num = "foo" + i;

        structure_Anf_t::structure_Art_t struc_new_Art;

        for (int x = 0; x < 3; x++) // add some data to Art
        {
            struc_new_Art.Art = "bar" + x;

            ArtList.append (struc_new_Art);
        }

        FullAnfList.append (struc_act_Anf);
    }

}

Редактировать: Некоторые незначительные изменения в коде.

Как я писал выше, после цикла i-times-FullAnfList. count () = 1, а не 5, как ожидалось.

1 Ответ

0 голосов
/ 24 октября 2019

У меня нет Qt, я конвертирую его в Std c ++, он работает правильно:

#include <iostream>
#include <list>

using namespace std;
using QString = std::string;

template <typename T>
using QList = std::list<T, std::allocator<T>>;

typedef struct structure_Anf
{
public:
    typedef struct structure_Art
    {
    public:
        QString Art = "";

    }
    structure_Art_t;

    QString Num = "";

    QList<structure_Art_t> ArtList;
}
structure_Anf_t;

QList <structure_Anf_t> FullAnfList;

structure_Anf_t struc_act_Anf; // holding actual used instance of structure
void test()
{
    for (auto i : { 1,2,3,4,5,6 })
    {
        struc_act_Anf = {};

        struc_act_Anf.Num = "foo";
        structure_Anf_t::structure_Art_t struc_new_Art;

        for (auto i : { 1,2,3,4,5,6})
        {
            struc_new_Art.Art = "bar";

            struc_act_Anf.ArtList.push_back(struc_new_Art);
        }

        FullAnfList.push_back(struc_act_Anf);
    }
}

int main()
{
    test();
    std::cin.get();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...