2017-03-09 86 views
0

我正在使用VS2015为maya创建一个C++插件作为动态库,直到现在,我还没有使用Qt5,但现在我需要Qt5.6.1中的Q_Gadget和Q_Enum功能,所以我开始了设置我的vs包含qt,一切都在编译,我没有问题在我的库中使用任何Qt类,但是当我尝试使用任何qt的属性系统(Q_GADGET,Q_ENUM等)时, t似乎生成任何文件,我使用的Qt VS工具2.Qt5 moc不生成文件

我读过的地方,我应该将我的项目转换为Qt项目,但解释如何做到这一点很不清楚,我不确定我是否可以为我目前拥有大量文件的项目做到这一点。

有没有办法将moc设置为运行我所有的.h文件并自动包含生成的文件?

在此先感谢。

回答

0

能修复使用帮助我的问题,此页面提供的:

automatic mocing in visual studio

我们创建ClCompile之前自定义的目标项目内VS属性文件(.props),将加载所有.HPP文件对它们执行moc.exe

修改我的5.6.1项目.props:

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
    <SourceDir>$(ProjectDir)</SourceDir> 
    <CppDir>$(SourceDir)/</CppDir> 
    <GenDir>$(SourceDir)/Generated</GenDir> 
    </PropertyGroup> 

    <PropertyGroup> 
    <QtDir>D:\Qt\Qt5.6.1\5.6\msvc2015</QtDir> 
    <MocExt>hpp</MocExt> 
    <Moc>$(QtDir)/bin/moc.exe</Moc> 
    </PropertyGroup> 

    <Target Inputs="@(QtIncludes)" 
      Name="Moc" 
      BeforeTargets="ClCompile" 
      Outputs="@(QtIncludes->'$(GenDir)/moc_%(Filename).cpp')"> 
    <Exec Command = "$(Moc) &quot;%(QtIncludes.identity)&quot; -nw -o $(GenDir)/moc_%(Filename).cpp $(MocFlags)"/> 
    </Target> 
    <Target Name="CreateDirectories" BeforeTargets="Moc"> 
    <MakeDir 
     Directories="$(GenDir)"/> 
    </Target> 

    <Target Inputs="@(CopyToOutput)" 
      Name="CopytoOut" 
      Outputs="@(CopyToOutput->'%(DestinationFolder)/%(RecursiveDir)%(Filename)%(Extension)')" 
      AfterTargets="Link"> 
    </Target> 
    <ItemDefinitionGroup /> 
    <ItemGroup> 
    <QtIncludes Include="$(ProjectDir)/**/*.$(MocExt)"/> 
    </ItemGroup> 
</Project>