将 Qt moc 文件添加到项目中

Posted

技术标签:

【中文标题】将 Qt moc 文件添加到项目中【英文标题】:Adding Qt moc file to project 【发布时间】:2014-02-06 08:57:56 【问题描述】:

有没有办法强制重新编译其他项目moc 文件?我使用 Visual Studio,我有一个 qt 项目,我在其中添加了其他带有接口和信号/插槽的项目类(比如说thing.cppthing.h

ui_thing.h(已包含generated files文件夹),

moc_thing.cpp in generated files\debug(因为主项目处于调试模式),

thing.ui 变成Form files)

在我决定进行一些更改,添加一些插槽/信号之前,它工作正常。 您可以猜到包含的moc 文件不会重新编译。我决定更改 thing.h 的一些属性。

我从主项目文件中复制了参数,所以 在命令行部分有

"$(QTDIR)\bin\moc.exe" "$(InputPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_$(InputName).cpp" -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_THREAD_SUPPORT -DQT_CORE_LIB -DQT_GUI_LIB -DQWT3D_DLL -DQT_DLL -DQT_SVG_LIB -DQT_SCRIPT_LIB -DQT_MULTIMEDIA_LIB "-I.\parsers" "-I$(QWTDIR)\include" "-I.\ProductionHistory\GeneratedFiles" "-I.\ProductionHistory" "-I.\GeneratedFiles" "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\qtmain" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtSql" "-I$(QTDIR)\include\QtGui" "-I." "-I$(Boost)\." "-I.\well groups widget" "-I.\rules widget" "-I.\gui" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtScript" "-I$(QTDIR)\include\ActiveQt" "-I$(QTDIR)\include\QtMultimedia"

在输出数据部分".\databaseOpening\GeneratedFiles\$(ConfigurationName)\moc_$(InputName).cpp"

在附加依赖部分有 "$(QTDIR)\bin\moc.exe"; $(InputPath)

但它仍然没有重新编译。有没有办法解决这个问题?

【问题讨论】:

如果在其他依赖项中这样做:"$(QTDIR)\bin\moc.exe";$(InputPath)?请注意,值之间有一个分号,而不是空格。 @vahancho 好吧,似乎没有帮助,但谢谢我编辑了这个问题 可以使用Qt Visual Studio插件 @DmitrySazonov 你是什么意思?此外,我遇到了一些问题 - 我什至无法将新的 Qtclass 添加到主项目中,因为It is impossible to add a QtGuiClass to the current project, as it was not created using Qt5VSAddin. 您应该将项目创建为 Qt 项目 - 然后将启用此功能(包括您的原始问题)。 【参考方案1】:

尝试检查/修复项目文件 *.vcxproj

    PropertyGroup Label="Globals" 部分中添加 关键字
<PropertyGroup Label="Globals">
   <ProjectGuid>....
   <RootNamespace>...
   <Keyword>Qt4VSv1.0</Keyword> <-----------------
</PropertyGroup>
    检查 ProjectExtensions/VisualStudio/UserProperties 部分的属性 Qt5Version_x0020_Win32 (>>Qt5...)
 <ProjectExtensions>
    <VisualStudio>
      <UserProperties MocDir=".\GeneratedFiles\$(ConfigurationName)" 
         Qt5Version_x0020_Win32="$(DefaultQtVersion)"  <-------
         UicDir=".\GeneratedFiles" />
    </VisualStudio>
  </ProjectExtensions>

【讨论】:

你好 :) 自从我上次用 C++/Qt 编写代码已经 4 年了,但感谢您的回答 不幸的是我没有机会检查它,这是我第一次工作的项目

以上是关于将 Qt moc 文件添加到项目中的主要内容,如果未能解决你的问题,请参考以下文章

如何在 qmake 项目中向 moc 添加特定标志?

涉及 moc 文件的 Qt 错误未通过清理项目修复

Qt creator运行出现moc文件错误求大神解答

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

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

waf : 将编译器标志传递给 qt 的 moc