Russian Qt Forum
Ноябрь 25, 2024, 18:41 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Создание вектора содержащего структуры  (Прочитано 7879 раз)
daenux
Гость
« : Ноябрь 17, 2010, 20:27 »

Есть QVector!

Код:
    struct gStruct {
        QString *gId;
        QString *gDesignation;
    };

    gStruct *braceGroups;

    QVector<gStruct> *gVector;

Так правильно создавать вектор, каждый элемент каторого содержит указанную структуру?

Код:
gVector = new QVector<gStruct>();

    if (qsqTransactions->exec("SELECT \"ID_GROUP\", \"DESIGNATION\" FROM \"T_GROUPS\" ORDER BY \"DESIGNATION\";")) {
        while (qsqTransactions->next()) {
            braceGroups = new gStruct;

            braceGroups->gId = new QString();

            *braceGroups->gId = qsqTransactions->record().field("ID_GROUP").value().toString();

            braceGroups->gDesignation = new QString();

            *braceGroups->gDesignation = qsqTransactions->record().field("DESIGNATION").value().toString();

            gVector->push_back(*braceGroups);
        }
    }
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Ноябрь 17, 2010, 20:35 »

Зачем все в куче?
Код
C++ (Qt)
struct gStruct {
       QString gId;
       QString gDesignation;
   };
 
 
 
   QVector<gStruct> gVector;
if (qsqTransactions.exec("SELECT \"ID_GROUP\", \"DESIGNATION\" FROM \"T_GROUPS\" ORDER BY \"DESIGNATION\";")) {
       while (qsqTransactions.next()) {
           gStruct braceGroups;
           braceGroups.gId = qsqTransactions.record().field("ID_GROUP").value().toString();
           braceGroups.gDesignation = qsqTransactions.record().field("DESIGNATION").value().toString();
           gVector.push_back(braceGroups);
       }
   }
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Karl-Philipp
Гость
« Ответ #2 : Ноябрь 17, 2010, 20:37 »

1. Зачем вектор был объявлен в виде указателя?
2. Что за необходимость создавать указатели на QString внутри структуры в данном случае?

я бы хранил указатели на структуру в векторе, а в самой структуре обычные стековые переменные.

Код
C++ (Qt)
struct gStruct {
       QString gId;
       QString gDesignation;
   };
 
...
 
   QVector<gStruct *> gVector;
Записан
daenux
Гость
« Ответ #3 : Ноябрь 17, 2010, 20:50 »

Спасибо вам обоим!

Я сделал как Пантер велел, все с этим согласны?

А так как terlan у меня не получилось, можете пожалуста дописать код для наглядности!
Записан
Karl-Philipp
Гость
« Ответ #4 : Ноябрь 17, 2010, 21:14 »

Код
C++ (Qt)
struct gStruct {
       QString gId;
       QString gDesignation;
   };
 
...
 
   QVector<gStruct *> gVector;
 
if (qsqTransactions.exec("SELECT \"ID_GROUP\", \"DESIGNATION\" FROM \"T_GROUPS\" ORDER BY \"DESIGNATION\";"))
{
       vector<gStruct *>::iterator iteratorGVector;
       while (qsqTransactions.next())
       {
 
gVector.push_back( new gStruct() );
iteratorGVector = gVector.end() - 1; // установили итератор на только что созданный указатель вектора
 
       (*iteratorGVector)->gId = qsqTransactions.record().field("ID_GROUP").value().toString();
       (*iteratorGVector)->gDesignation = qsqTransactions.record().field("DESIGNATION").value().toString();
       }
}
 

Код не проверял, но моя идея такова Улыбающийся
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #5 : Ноябрь 17, 2010, 21:18 »

terlan, зачем такие извращения?
Код
C++ (Qt)
struct gStruct {
       QString gId;
       QString gDesignation;
   };
 
...
 
   QVector<gStruct *> gVector;
 
if (qsqTransactions.exec("SELECT \"ID_GROUP\", \"DESIGNATION\" FROM \"T_GROUPS\" ORDER BY \"DESIGNATION\";"))
{
       gStruct *s;
       while (qsqTransactions.next())
       {
 
s = new gStruct();
       s->gId = qsqTransactions.record().field("ID_GROUP").value().toString();
       s->gDesignation = qsqTransactions.record().field("DESIGNATION").value().toString();
       gVector.push_back (s);
       }
}
 
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
daenux
Гость
« Ответ #6 : Ноябрь 17, 2010, 21:27 »

Спасибо!!!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.257 секунд. Запросов: 22.