C++ 从构造函数创建QabstracteModel对象

C++ 从构造函数创建QabstracteModel对象,c++,qt,C++,Qt,我得到这个错误: /home/niko/QT_snippets/oop2/bus.cpp:3: error: no matching function for call to ‘Person::Person(Bus*, int)’ Bus::Bus(QObject *parent) : QObject(parent) , person1(this,100), person2(this,200)

我得到这个错误:

/home/niko/QT_snippets/oop2/bus.cpp:3: error: no matching function for call to ‘Person::Person(Bus*, int)’
 Bus::Bus(QObject *parent) : QObject(parent) , person1(this,100), person2(this,200)
                                                                                  ^
/home/niko/QT_snippets/oop2/bus.h:5: In file included from ../oop2/bus.h:5:0,
/home/niko/QT_snippets/oop2/bus.cpp:1: from ../oop2/bus.cpp:1:
/home/niko/QT_snippets/oop2/person.h:11: candidate: Person::Person(QAbstractItemModel*, int)
     explicit Person(QAbstractItemModel *parent = 0, int shoe_color=0);
              ^
/home/niko/QT_snippets/oop2/person.h:11: note:   no known conversion for argument 1 from ‘Bus*’ to ‘QAbstractItemModel*’
我的问题是,如何初始化成员属于
QAbstractModelItem
类的对象?(
person1
person2
的父项必须是
Bus
,因为当我删除它时,我希望将子项删除到。)我尝试强制转换到
(QObject*)
,但我遇到另一个编译错误

这是示例的完整源代码:

//File: bus.h
#ifndef BUS_H
#define BUS_H

#include <QObject>
#include "person.h"

class Bus : public QObject
{
    Q_OBJECT
public:
    explicit Bus(QObject *parent = 0);

private:
    Person      person1;
    Person      person2;
};

#endif // BUS_H


//File: bus.cpp
#include "bus.h"

Bus::Bus(QObject *parent) : QObject(parent) , person1(this,100), person2(this,200)
{

}



//File: person.h
#ifndef PERSON_H
#define PERSON_H

#include <QObject>
#include <QAbstractItemModel>

class Person : public QAbstractItemModel
{
    Q_OBJECT
public:
    explicit Person(QAbstractItemModel *parent = 0, int shoe_color=0);
    QModelIndex index(int row, int column,const QModelIndex &parent = QModelIndex()) const;
    QModelIndex parent(const QModelIndex &child) const;
    int rowCount(const QModelIndex &parent = QModelIndex()) const;
    int columnCount(const QModelIndex &parent = QModelIndex()) const;
    QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
private:
    int m_shoe_color;
};

#endif // PERSON_H


//File: person.cpp
#include "person.h"

Person::Person(QAbstractItemModel *parent,int shoe_color) : QAbstractItemModel(parent)
{
    m_shoe_color=shoe_color;
}
QModelIndex index(int row, int column,const QModelIndex &parent = QModelIndex()) const {

}
QModelIndex parent(const QModelIndex &child) const {

}
int rowCount(const QModelIndex &parent = QModelIndex()) const {

}
int columnCount(const QModelIndex &parent = QModelIndex()) const {

}
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const {

}



//File: main.cpp
#include <QCoreApplication>
#include "person.h"
#include "bus.h"

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    Bus b;
    return a.exec();
}
//文件:bus.h
#ifndef总线
#定义总线
#包括
#包括“person.h”
类总线:公共QObject
{
Q_对象
公众:
显式总线(QObject*parent=0);
私人:
个人1;
个人2;
};
#endif//总线
//文件:bus.cpp
#包括“bus.h”
总线::总线(QObject*parent):QObject(parent)、person1(this,100)、person2(this,200)
{
}
//文件:person.h
#ifndef人员
#定义人
#包括
#包括
类人:公共QabstracteModel
{
Q_对象
公众:
显式Person(qabstractemmodel*parent=0,int-shoe\u-color=0);
QModelIndex索引(int行,int列,常量QModelIndex&parent=QModelIndex())常量;
QModelIndex父项(常数QModelIndex和子项)常数;
int rowCount(常量QModelIndex&parent=QModelIndex())常量;
int columnCount(常量QModelIndex&parent=QModelIndex())常量;
QVariant数据(常量QModelIndex&index,int-role=Qt::DisplayRole)常量;
私人:
int m_鞋色;
};
#endif//PERSON\u H
//文件:person.cpp
#包括“person.h”
Person::Person(QAbstractItemModel*父项,int shoe_color):QAbstractItemModel(父项)
{
m_shoe_color=鞋_color;
}
QModelIndex索引(int行,int列,常量QModelIndex&parent=QModelIndex())常量{
}
QModelIndex父项(常量QModelIndex和子项)常量{
}
int行计数(常量QModelIndex&parent=QModelIndex())常量{
}
int columnCount(常量QModelIndex&parent=QModelIndex())常量{
}
QVariant数据(常量QModelIndex&index,int-role=Qt::DisplayRole)常量{
}
//文件:main.cpp
#包括
#包括“person.h”
#包括“bus.h”
int main(int argc,char*argv[])
{
qcorea应用程序(argc、argv);
b路公交车;
返回a.exec();
}
person1(这个,100)
行中,您将
传递给
Person
构造函数,并且
在当前上下文中是
总线
。但是构造函数期望
qabstractemmodel
作为父级

因为Bus不是QAbstractItemModel的子类,所以会出现编译器错误


要使其工作,可以使Bus成为QAbstractItemModel的派生,或者将Person构造函数更改为显式Person(QObject*parent=0,int shoe\u color=0)

在这一行:
person1(这个,100)
您将
这个
传递给Person构造函数,它是
Bus
。但是构造函数希望
qabstractemmodel
作为父级。总线不是
qabstractemmodel
的子类,当然您会得到一个错误。使总线成为QAbstractItemModel的派生,或者将Person构造函数更改为显式Person(QObject*parent=0,int shoe\u color=0)@lena,正确。你可以回答我会接受的。