通过接口继承接口的正确方法

时间:2016-02-14 18:00:10

标签: qt interface qt-creator abstract-class qabstracttablemodel

我有界面class IHistory。我想实现QAbstractTableModel。 我的代码调用undefined reference to vtable错误,并且通过运行qmake无法修复。

(适用ihistory.h)

class IHistory: public QAbstractTableModel
{
    ...
    // QAbstractItemModel interface
public:
    virtual int rowCount(const QModelIndex &parent) const Q_DECL_OVERRIDE ;
    virtual int columnCount(const QModelIndex &parent) const Q_DECL_OVERRIDE ;
    virtual QVariant data(const QModelIndex &index, int role) const Q_DECL_OVERRIDE ;
    virtual QVariant headerData(int section, Qt::Orientation orientation, int role) const Q_DECL_OVERRIDE ;
    ...
};

在儿童班,我写了(history.h)

class History : public IHistory
{
    //Q_OBJECT
    Q_INTERFACES(IHistory)

public:
    History();
    ~History();

    ...
    // QAbstractItemModel interface
public:
    int rowCount(const QModelIndex &parent) const;
    int columnCount(const QModelIndex &parent) const;
    QVariant data(const QModelIndex &index, int role) const;
    QVariant headerData(int section, Qt::Orientation orientation, int role) const;
    ...
};

是否有正确的方法,或者我应该在QAbstractTableModel中实施class History

1 个答案:

答案 0 :(得分:0)

我找到了正确的方法! 只需删除界面中的重新定义,并在history.cpp中添加所有抽象函数的实现。

所以,像规则:

如果你想在QT中的其他界面继承接口类,那就像平常一样:class IFoo: public IBar。然后,当您实现接口IFoo时:

1)继承自界面: class Foo: public IFoo

2)按 Alt + Enter 并选择 Insert virtual methods of base classes

3)然后,对于每种方法,使用 Alt + Enter 并选择 Implement (methodname) in class Foo.cpp

4)利润!