自定义类型Qlist和范围

时间:2014-11-09 11:55:23

标签: c++ qt

我正在尝试将包含QStrings Qlist的学生类型的对象附加到学生类型的Qlist中,我已经验证了Qstrings在一个阶段被添加到学生对象中,但是当我在某个阶段它们似乎是空的转到下面的代码;

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

输出继电器:

  

&#34;不好!&#34; &#34;不好!&#34; &#34;不好!&#34; &#34;不好!&#34; &#34;不好!&#34; &#34;不   好!#&34; &#34;不好!&#34; &#34;不好!&#34; &#34;不好!&#34; &#34;不好!&#34; &#34;不好!&#34;   &#34;不好!&#34; &#34;不好!&#34; &#34;不好!&#34; &#34;不好!&#34; &#34;不好!&#34; &#34;不   好!&#34;

1 个答案:

答案 0 :(得分:1)

动态分配列表完全没有意义甚至效率低,而是使用QList<QString> list;,将list->更改为list.,将*list更改为list

您在[{1}}中无理由循环,在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
}