Qt5 moc не генерирующий файл

Я делаю плагин C++ для Maya в качестве динамической библиотеки с использованием VS2015, до сих пор я не использовал Qt5, но теперь мне нужны функциональные возможности Q_Gadget и Q_Enum из Qt5.6.1, поэтому я начал настраивать свои vs для включения qt, все компилируется, и у меня нет проблем использовать какой-либо класс Qt в моей библиотеке, но когда я пытаюсь использовать какую-либо систему свойств qt (Q_GADGET, Q_ENUM и т. д.), moc, похоже, не генерирует какой-либо файл, я использую инструменты Qt VS 2.

Я где-то читал, что я должен преобразовать свой проект в проект Qt, но объяснение того, как это сделать, очень неясно, и я не уверен, смогу ли я сделать это для моего текущего проекта, который имеет огромное количество файл.

Есть ли способ настроить moc для запуска всех моих.h и автоматически включать сгенерированный файл?

Заранее спасибо.

1 ответ

Решение

Могли бы исправить мои проблемы, используя помощь, предоставленную на этой странице:

автоматическое движение в визуальной студии

Мы создаем файл свойств VS (.props) внутри проекта с пользовательской целью перед ClCompile, который загрузит все файлы.hpp и выполнит на них moc.exe

.props, модифицированный для моего проекта 5.6.1:

<?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>
Другие вопросы по тегам