1

我从我们的客户那里收到了一个基于 Visual C++ QT 的项目。我已经安装了 QT 库,然后我已经编译了该项目。项目编译没有任何问题。

现在,我需要在现有项目中包含一个新的附加 GUI 界面。我在 QT 设计器中创建了一个 GUI,然后保存在 VC++ 项目的源目录中。然后我为新的 GUI 编写了 .h 和 .cpp 文件并且可以调用这个接口。现在,当我在 .h 文件中包含 Q_OBJECT 时,我需要包含 SIGNALS 和 SLOTS。我有编译错误。

这些是错误,请帮我解决这个问题

unresolved external symbol "public: virtual struct QMetaObject const * __thiscall BetaLineServer::metaObject(void)const " (?metaObject)

unresolved external symbol "public: virtual void * __thiscall BetaLineServer::qt_metacast(char const *)"

unresolved external symbol "public: virtual int __thiscall BetaLineServer::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@
4

4 回答 4

4

任何时候你添加一个 Q_OBJECT 宏到一个类你需要确保重新运行 qmake 然后编译。

于 2011-09-01T14:58:22.803 回答
4

您只需要使用包含 Q_OBJECT 宏的 moc 编译头文件。以及如何做到这一点?这里是

  1. 您可以手动键入命令来编译 moc 或 uic 文件或

  2. -> 安装 Qt-VS 插件。http://qt.nokia.com/downloads/visual-studio-add-in

    -> 现在,打开 Visual Studio 并按照此处所述创建一个新的 Qt 项目,然后

    -> 右键单击​​包含 Q_OBJECT 宏的头文件,您应该会找到类似下面的内容。将这些命令复制到您的项目中。

    -> 在“命令行”命令中将头文件名替换为您的名称

    -> 编译一次,应该会生成 moc_xxxxx.cpp 文件,将它们包含在您的项目中。

在此处输入图像描述

  1. 为了将来参考,如果您使用此插件在 VS 中创建 Qt 项目,您应该自动添加这些命令
于 2011-09-01T15:26:11.653 回答
2

您可能只需将 .ui、.cpp 和 .h 文件添加到项目文件中。

如果在 ui 文件中列出,Qt 将在 ui 文件上运行“moc”,它会创建源代码来提供您丢失的符号。

于 2011-09-01T14:55:31.247 回答
1

从项目中排除 .h 文件并再次包含它 - moc_.cpp 将出现在“生成的文件”中,并且链接错误消失了。

于 2012-09-28T14:53:30.727 回答