2011-09-01 111 views
1

我已收到来自我们客户的基于Visual C++ QT的项目。我已经安装了QT库,然后编译了这个项目。该项目编译没有任何问题。Q_OBJECT Visual C++中的问题

现在,我需要在现有项目中增加一个新的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 * *)" ([email protected] 
+0

声音像一些文件不会通过moc。你有.pro文件吗?添加新文件,并尝试使用qmake – pezcode

回答

2

你可能只需要你的.ui,的.cpp和.h文件添加到项目文件。

Qt将在ui文件上运行'moc',如果它在那里列出的话,它将创建源代码来提供缺失的符号。

+0

重新生成VC项目谢谢sje397 ....它现在正在工作.... – lankabeta

4

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

+0

感谢您的回复 – lankabeta

+0

你如何运行qmake? – Matthew

4

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

  1. 您可以手动键入编译MOC或UIC文件或

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

    - >现在,打开Visual Studio,并在here和描述的创建一个新的Qt项目,然后

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

    - >在“命令行”命令替换你的头文件名

    - >编译一次,应该产生moc_xxxxx.cpp文件,包括他们在您的项目。

enter image description here

  • 以供将来参考,如果使用这个插件创建在VS一个Qt项目你应该有这些命令自动添加
  • +0

    您还需要将moc的输出添加到项目中,以便编译它。 –

    +0

    @Dusty:是的,忘了 – blueskin

    +0

    感谢您的回复 – lankabeta

    1

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