から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*)
にキャストしようとしましたが、私は別のコンパイルエラーを得ました。もしPerson
コンストラクタにthis
を渡すperson1(this, 100)
//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();
}
に人のコンストラクタを変更動作させるために
'。しかし、コンストラクタは 'QAbstractItemModel'を親として必要とします。 Busは 'QAbstractItemModel'のサブクラスではありませんが、もちろんエラーになります。どちらかがバスQAbstractItemModelの派生物を作るか、または明示的な人(QObjectを*親= 0、INT shoe_color = 0) 'に人のコンストラクタを変更、正しい' – lena
@lena、。あなたは私がそれを受け入れると答えるかもしれません。 – Nulik