2017-03-09 80 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>