2014-11-09 2 views
0

Я пытаюсь добавить объект типа student, содержащий Qlist из QStrings, в Qlist из числа студентов типа, я подтвердил, что Qstrings добавляются к объекту-ученику на одном этапе, однако они кажутся быть пустым, когда я получу код ниже;Custom Type Qlist и Scope

for(int i = 0; i < studentList.size(); i++){ 
       qDebug() << studentList.at(i).atindex(i); 

Показан внизу.

- Listmanager.h

#ifndef LISTMANAGER_H 
#define LISTMANAGER_H 
#include <QString> 
#include <QList> 
#include <QStandardItemModel> 

class listManager: QObject 
{ 
    Q_OBJECT 
public: 
    listManager(); 
    listManager(QList<QString> list); 
    QAbstractItemModel* listManager::getmodelview(); 
    QAbstractItemModel* listManager::getclassmodelView(); 
public: 
    QStandardItemModel *courseModel = new QStandardItemModel(0,0); 
    QStandardItemModel *classModel = new QStandardItemModel(0,0); 

}; 

#endif // LISTMANAGER_H 

- Релевент часть listmanager.cpp

 student st; 
     int count2 = 0; 
     for (int i =6; i < list.size(); ++i){ 
      if(count2 < 6){ 
       st.appendtolist(list.at(i)); 
       count2++; 
      } 
      if(count2 == 6){ 
       count2 =0; 
       studentList.append(st); 
       st.showlist(); 
       st.clearlist(); 
      } 
     } 

     for(int i = 0; i < studentList.size(); i++){ 
      qDebug() << studentList.at(i).atindex(i); 

- student.cpp

 #include "student.h" 
     #include <QDebug> 

     student::student() 
     { 
     } 

     void student::appendtolist(QString item){ 
      list->append(item); 
     } 

     void student::showlist(){ 
      qDebug() << *list; 
     } 
     void student::clearlist(){ 
      list->clear(); 
     } 

     QString student::atindex(int index)const { 
      for(int i = 0; i < list->size(); i++){ 
       if(index == i){ 
        return list->at(i); 
       } 
      } 

      return "Not Good!"; 
     } 

- student.h

#ifndef STUDENT_H 
#define STUDENT_H 
#include <QString> 
#include <QList> 

class student 
{ 
public: 
    QList<QString> *list = new QList<QString>(); 
    student(); 
    void student::appendtolist(QString item); 
    void student::showlist(); 
    void student::clearlist(); 
    QString atindex(int index) const; 
}; 

#endif // STUDENT_H 

Ouput:

"Не хорошо!" "Нехорошо!" "Нехорошо!" "Нехорошо!" "Нехорошо!" «Не Хорошо!» "Нехорошо!" "Нехорошо!" "Нехорошо!" "Нехорошо!" "Нехорошо!" «Неплохо!» "Нехорошо!" "Нехорошо!" "Нехорошо!" "Нехорошо!" «Не Хорошо!»

+0

Нет необходимости динамически распределять список, он уже использует динамическое распределение внутри страны. – dtech

+0

Извините, не могли бы вы подробно остановиться на этом. – user4217633

+1

Вам не нужно «QList * list = new QList ();' вместо 'QList list;' достаточно. Вы ничего не получаете от этого и даже теряете немного, так как он добавляет еще один уровень косвенности и использования памяти и накладных расходов. – dtech

ответ

1

Это entirelly бессмысленно и даже неэффективно выделить список динамически, используйте QList<QString> list; вместо этого, изменить list-> к list. и *list к list

Вы цикл без причины в atindex(), бессмысленно пробегает по списку до i показов index, вы можете проверить, находится ли index в диапазоне списка с одним выражением.

QString student::atindex(int index) const { 
    if (index < list.size()) return list.at(index); // index is in range 
    else return "Not good!"; // index is out of range - no good 
} 
+0

Спасибо, если вы знаете, как изменились эти элементы, исправить код? – user4217633

+0

@ user4217633 действительно ли это исправить? – dtech

+0

Частично, он возвращает мне некоторые элементы, не все из них. Извините, что он не полностью разрешен. – user4217633