我正在尝试将包含QStrings Qlist的Student类型的对象追加到类型Student的Qlist上,我已经验证了Qstring是在一个阶段添加到Student对象的,但是当我到达该对象时它们似乎是空的下面的代码;

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的-relevent部分

        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!";
        }


学生

#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


输出:


  “不好!” “不好!” “不好!” “不好!” “不好!” “不
  好!”“不好!”“不好!”“不好!”“不好!”“不好!”
  “不好!” “不好!” “不好!” “不好!” “不好!” “不
  好!”

最佳答案

动态分配列表,使用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
}

关于c++ - 自定义类型Qlist和范围,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26827878/

10-12 23:58