Я получаю эту ошибку:Создание QAbstractItemModel объекта из конструктора
/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();
}
В этой строке: 'PERSON1 (это, 100)' 'вы передаете this' конструктору Человек, который является' Bus '. Но конструктор хочет, чтобы 'QAbstractItemModel' был родителем. Шина не является подклассом 'QAbstractItemModel', конечно, вы получите сообщение об ошибке. Либо сделайте Bus производным от QAbstractItemModel, либо измените конструктор Person на «явное лицо» (QObject * parent = 0, int shoe_color = 0), ' – lena
@lena, правильно. вы можете ответить, что я приму это. – Nulik