gpt4 book ai didi

Qt、VS2005、Qwt - 无法在从 Qwt 小部件派生的类中使用 Q_OBJECT

转载 作者:行者123 更新时间:2023-12-02 09:39:51 28 4
gpt4 key购买 nike

我们已经为 VS2005 编译了 QT 4.6 和 QWT 5.2.0。

我们正在尝试从 QwtDial 派生一个类,并且派生类具有插槽。所以,我们需要添加Q_OBJECT宏。但是,当我们这样做时,链接器会阻止此错误:

错误LNK2001:无法解析的外部符号“public:static struct QMetaObject const QwtDial::staticMetaObject”(?staticMetaObject@QwtDial@@2UQMetaObject@@B)

我用depends查看了Qwt.dll,它有这个功能。使用十六进制编辑器查看 .lib 文件表明它与该名称损坏的字符串完全匹配。

我们的路径中有 Qwt 库。实际上,如果我重命名该库,则会出现找不到该库文件的错误。所以,我们知道它正在寻找正确的库。

如果我们跳过 Q_OBJECT,那么所有内容都会使用多个 QWT 小部件(包括我们的非 Q_OBJECT Qwt 派生类)正确链接和绘制。

有谁知道什么会导致这个非常烦人的链接器问题?

更新:

我已经验证我添加 Q_OBJECT 的类肯定会为其生成 MOC 文件。链接器错误实际上来自此生成的 MOC 文件:

moc_GaugeWidget1.obj : error LNK2001: unresolved external symbol "public: static
struct QMetaObject const QwtDial::staticMetaObject"
(?staticMetaObject@QwtDial@@2UQMetaObject@@B)

所以,它看起来像一些非常奇怪和非典型的东西。该符号肯定在库中。

最佳答案

我也遇到同样的问题。好吧,我正在使用 Qt4.4 和 VC2003 更新一个旧项目,并且我使用 QwtPlot 而不是 QwtDial。错误是:

LNK2001:无法解析的外部符号“public:static struct QMetaObject const QwtPlot::staticMetaObject”(?staticMetaObject@QwtPlot@@2UQMetaObject@@B)

就这样。没有其他的。我发现论坛引用资料指出了调试/发布混合的问题,并且可能与删除 Qt Designer 插件有关。

这似乎对我有用:将行:“DEFINES += QWT_DLL”添加到project.pro 文件的顶部。

qmake项目.pro

nmake 发布

关于Qt、VS2005、Qwt - 无法在从 Qwt 小部件派生的类中使用 Q_OBJECT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2022174/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com