如何解决VS+Qt不生成moc文件问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何解决VS+Qt不生成moc文件问题相关的知识,希望对你有一定的参考价值。

参考技术A 在工程中可以看到这个generated
files目录下是有一个看似moc文件的文件,双击打开的话:
双击打开的话,会弹出这个窗口,说文件不存在或者删除了:
选中没有生成moc文件的头文件,鼠标右键选择属性,
在属性页,可以看到general->itemtype这行属性:
点击右边的下拉按钮,找到并修改这行属性:
修改后,可以看到左边菜单,多了一行属性,点击,可看到右边有很多项,全部都是空的
选择另一个可以生成moc文件的文件,选择查看属性。
参考另一个文件,将每个对应项都填好,既可以正常生成moc文件了。

Qt5 moc没有生成文件

【中文标题】Qt5 moc没有生成文件【英文标题】:Qt5 moc not generating file 【发布时间】:2017-03-09 23:59:57 【问题描述】:

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

我在某处读到我应该将我的项目转换为 Qt 项目,但是关于如何做到这一点的解释非常不清楚,我不确定我是否真的可以为我当前的项目做到这一点大量的文件。

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

提前致谢。

【问题讨论】:

【参考方案1】:

可以使用此页面上提供的帮助解决我的问题:

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>

【讨论】:

以上是关于如何解决VS+Qt不生成moc文件问题的主要内容,如果未能解决你的问题,请参考以下文章

QT5.8+VS2015 开发时遇到的坑

Qt Vs addin - 不为 moc_*.cpp 文件生成 .obj 文件

关于在vs2010中编译Qt项目时出现“无法解析的外部命令”的错误

在Visual Studio 2010中从生成中排除moc-ed文件

Qt5 moc没有生成文件

Qt+VS程序运行错误问题