如何在Xcode中使用Q_OBJECT宏编译头文件?

Jef*_*rey 2 xcode qt moc qobject

我在Xcode中创建C++项目,它链接到Qt框架.你好世界计划运作良好.当我添加从QObject派生的类并添加Q_OBJCET宏时,会出现链接错误.

这堂课是

MyObject.h

#ifndef MyObject_h
#define MyObject_h

#include <QtCore/QObject>

class MyOBject : public QObject
{
  Q_OBJECT

public:
    MyOBject();

};


#endif
Run Code Online (Sandbox Code Playgroud)

MyObject.cpp

#include "MyObject.h"

MyOBject::MyOBject()
{
}
Run Code Online (Sandbox Code Playgroud)

我知道我应该先使用moc编译MyObject.h,然后将生成的moc_MyObject.cpp添加到Xcode项目中.

在Microsoft Visual Studio中,我可以配置此头文件以使用moc自定义工具进行编译.并将生成cpp文件添加到VS项目.

但这是Xcode.我的问题是:在Xcode中是否有相同的平均值来编译包含Q_OBJECT宏的头文件?

小智 6

以下是您在Xcode 6中的操作方法:

选择目标,然后在构建规则中创建新的自定义规则.将"Process"下拉列表设置为"名称匹配的源文件"并在其*.h旁边键入.将"使用"下拉菜单设置为"自定义脚本:",然后在脚本中键入与此类似的内容:

/path/to/your/Qt/bin/moc ${INPUT_FILE_PATH} -o ${DERIVED_FILE_DIR}/${INPUT_FILE_BASE}_moc.cpp
Run Code Online (Sandbox Code Playgroud)

您必须将路径更改为moc可执行文件的位置.现在将"输出文件"设置为:

${DERIVED_FILE_DIR}/${INPUT_FILE_BASE}_moc.cpp
Run Code Online (Sandbox Code Playgroud)

这就是自定义规则.

现在要使用此规则编译头文件.当您的目标仍然被选中时,请转到"构建阶段".展开"编译源"部分,点击底部的"+"按钮.查找并添加包含Q_OBJECT类的头文件.如果您在那里找不到它们,请先将这些标题添加到项目中.

就是这样,Xcode将在这些头上运行moc,它会理解moc的输出是.cpp,需要编译并链接到你的应用程序并为你做.