我写了两个 QAbstractListModel 子类:
class Model1: public QAbstractListModel {
Q_OBJECT
public:
int rowCount(const QModelIndex& parent=QModelIndex()) const;
QVariant data(const QModelIndex& index, int role) const;
void clear();
private:
QVector<Obj1*> m_items;
};
和
class Model2: public QAbstractListModel {
Q_OBJECT
public:
int rowCount(const QModelIndex& parent=QModelIndex()) const;
QVariant data(const QModelIndex& index, int role) const;
void clear();
private:
QVector<Obj2*> m_items;
};
此外,这两个类有一个插槽 AddObj(),它依赖于使用的指针(Obj1*
或Obj2*
)。
问题是,构造函数和析构函数是一样的,and 也是一样的rowCount
(clear
它们做的事情完全相同)。唯一的区别在data
于是什么m_items
。
在这里减少重复的最佳策略是什么?我尝试了一个基类:
class ModelBase: public QAbstractListModel {
Q_OBJECT
ModelBase(QObject* parent=0);
~ModelBase();
public:
virtual int rowCount(const QModelIndex& parent=QModelIndex()) const;
virtual QVariant data(const QModelIndex& index, int role) const = 0;
virtual void clear();
private:
QVector<QString*> m_items; // dummy vector
};
然后让其他类从中派生:
class ModelDerived1: public ModelBase {
Q_OBJECT
public:
ModelDerived1(QObject* parent=0);
~ModelDerived1();
QVariant data(const QModelIndex& index, int role) const = 0;
private:
QVector<Obj1*> m_items;
};
问题是在这种情况下,data
当这个模型附加到视图时,派生类的函数永远不会被调用。
然而,派生类data()
没有被调用(我放入了调试语句,它们从未被执行)。
我在这里做错了什么?