我有界面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
?
答案 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)利润!