问如果.cpp文件中有Q_OBJECT宏,为什么我的项目不能链接?EN

问如果.cpp文件中有Q_OBJECT宏,为什么我的项目不能链接?EN

这段代码按照预期进行编译、链接和工作:

代码语言:javascript复制#include

#include

#include "File_List_Model.h"

int main(int c,char**v)

{

QApplication app(c,v);

QStringList list;

list << "a" << "b" << "c";

File_List_Model* model = new File_List_Model;

model->set_entries(list);

QListView* view = new QListView;

view->setModel(model);

view->show();

return app.exec();

} 但是,当我将类定义放在.cpp文件中而不是头文件中时,我收到链接器错误,指出vtable没有正确定义。

代码语言:javascript复制#include

#include

//#include "File_List_Model.h"

#include "File_List_Proxy.h"

#include

#include

class File_List_Model : public QAbstractItemModel

{

Q_OBJECT

private:

QStringList data_;

public:

File_List_Model(QObject *parent = 0) :

QAbstractItemModel(parent)

{

}

int columnCount(const QModelIndex& parent) const

{

return 1;

}

QVariant data(const QModelIndex & index, int role) const

{

switch(role)

{

case Qt::DisplayRole:

return data_[index.row()];

default:

return QVariant();

}

}

QModelIndex index(int row, int column, const QModelIndex & parent) const

{

return createIndex(row,column);

}

QModelIndex parent(const QModelIndex & index) const

{

return QModelIndex();

}

bool set_entries(const QStringList& entries)

{

if (entries.size())

{

beginInsertRows(createIndex(0,0),0,entries.size());

data_ = entries;

endInsertRows();

emit dataChanged(createIndex(0,0),createIndex(0,entries.size()));

return true;

}

else

{

return false;

}

}

int rowCount(const QModelIndex & parent) const

{

return data_.size();

}

};

int main(int c,char**v)

{

QApplication app(c,v);

QStringList list;

list << "a" << "b" << "c";

File_List_Model* model = new File_List_Model;

model->set_entries(list);

File_List_Proxy* proxy = new File_List_Proxy;

proxy->setSourceModel(model);

QListView* view = new QListView;

view->setModel(proxy);

view->show();

return app.exec();

}代码语言:javascript复制//error:

debug/moc_File_List_Model.o:moc_File_List_Model.cpp:(.rdata$_ZTV15File_List_Model[vtable for File_List_Model]+0x44): undefined reference to `File_List_Model::columnCount(QModelIndex const&) const'

debug/moc_File_List_Model.o:moc_File_List_Model.cpp:(.rdata$_ZTV15File_List_Model[vtable for File_List_Model]+0x4c): undefined reference to `File_List_Model::data(QModelIndex const&, int) const'这似乎是完全相同的代码。为什么当代码在头文件中时,它会链接,而在其他情况下它不会链接?

相关推荐

Centos镜像国内最全下载地址
365bet官网在线

Centos镜像国内最全下载地址

01-11 👁️ 7549
长歌PVE高手进阶:相知配装思路分析(上篇)·加速详解
常见的软件测试方法有哪些?
365bet用网址

常见的软件测试方法有哪些?

07-21 👁️ 4084