带有 QGraphicsView 子类的构造函数上的 LNK2019

Posted

技术标签:

【中文标题】带有 QGraphicsView 子类的构造函数上的 LNK2019【英文标题】:LNK2019 on constructor with QGraphicsView subclass 【发布时间】:2014-07-17 16:44:24 【问题描述】:

我可能遗漏了一些明显的东西,但我无法摆脱 Qt 用户界面中的链接错误。

我已经隔离了导致问题的部分。基本上,我正在实现QGraphicsView 的子类来显示交互式开销图。由于某种原因,我无法解析构造函数。

OverheadMap.h:

#ifndef OVERHEADMAP_H
#define OVERHEADMAP_H

#include <QGraphicsView>

class OverheadMap : public QGraphicsView 
    Q_OBJECT

public:
    OverheadMap();
;

#endif // OVERHEADMAP_H

OverheadMap.cpp:

#include "OverheadMap.h"

OverheadMap::OverheadMap() 
    // Body

main.cpp:

#include "OverheadMap.h"

int main(int argc, char *argv[])

    OverheadMap *map = new OverheadMap();

LNK2019:

main.obj:-1: error: LNK2019: unresolved external symbol "public: __thiscall OverheadMap::OverheadMap(void)" (??0OverheadMap@@QAE@XZ) referenced in function _main

我可以毫无问题地使用带有OverheadMap 的 QtCreator 的自动完成功能,并且我已经完成了一个类似的 QFrame 子类实现,它正在工作,所以我怀疑这里有语法错误。

我错过了什么?

谢谢。

【问题讨论】:

而文件OverheadMap.cpp 在您的项目中并且正在构建中? 确保您已经为您的项目重新构建了 Qt 生成的文件。任何新类在拥有自己的文件之前都不会理解像 Q_OBJECT 这样的 Qt 语法。 如果您检查构建日志,您会发现它实际上是在没有错误或警告的情况下构建的? @AlexisLeclerc:你的项目文件在哪里?不幸的是,我至少不能在 Linux 上重现这个问题。你的代码对我来说很好,但我还是为你重新打开了。并不是说您应该抛弃 Qt 父/子机制。 感谢您的时间和帮助,现在我的完整代码可以工作了。我所缺少的只是一个愚蠢的 qmake 来重新建立构建路径! 【参考方案1】:

这段代码对我来说很好用。

因此,解决方案是您必须重新运行 qmake,因为根据您的 cmets,您修改了项目结构而没有告诉 qmake。

【讨论】:

【参考方案2】:

你需要调用你的基类的构造函数

OverheadMap::OverheadMap() : QGraphicsView()

    // Body

【讨论】:

我还是有同样的问题。 这个答案是错误的。如果是空列表,则不需要。

以上是关于带有 QGraphicsView 子类的构造函数上的 LNK2019的主要内容,如果未能解决你的问题,请参考以下文章

在 QGraphicsView 上锁定视图

通过构造函数参数实例化子类

typescript 从子类调用的构造函数参数推断类型

将构造函数值从子类传递到超类c++ [重复]

如何将 matplotlib 函数与 QGraphicsView 集成?

子类构造器与父类构造器