c++ - VC++ 2008下qtwinmigrate + qtpropertybrowser的编译组合

标签 c++ visual-studio-2008 qt

我需要在 MFC 应用程序下显示属性浏览器。

我尝试结合并编译两者的解决方案

http://qt.nokia.com/products/appdev/add-on-products/catalog/4/Windows/qtwinmigrate/ http://qt.nokia.com/products/appdev/add-on-products/catalog/4/Widgets/qtpropertybrowser/

我正在使用 VC2009、QT 2009.04 和 Visual Studio Add-On 1.1.1

注意,在我的机器下,我分别编译成功是没有问题的。

我复制并添加在

中找到的所有现有 CPP 和 HEADER 文件
qtpropertybrowser-2.5-opensource\src

进入

qtwinmigrate-2.8-opensource\examples\qtdll

这是我的新项目在屏幕截图中的样子(qtwinmigrate - 最右边的窗口)

alt text
(来源:googlepages.com)

qtpropertybrowser 是我可以毫无问题地编译的项目:

1>------ Rebuild All started: Project: simple, Configuration: Release Win32 ------
1>Deleting intermediate and output files for project 'simple', configuration 'Release|Win32'
1>Moc'ing qtpropertybrowserutils_p.h...
1>RCC ..\..\src\qtpropertybrowser.qrc
1>MOC ..\..\src\qtvariantproperty.h
1>MOC ..\..\src\qttreepropertybrowser.h
1>MOC ..\..\src\qtpropertymanager.h
1>MOC ..\..\src\qtpropertybrowser.h
1>MOC ..\..\src\qtgroupboxpropertybrowser.h
1>MOC ..\..\src\qteditorfactory.h
1>MOC ..\..\src\qtbuttonpropertybrowser.h
1>Compiling...
.
.
.
1>Compiling...
1>moc_qtpropertybrowserutils_p.cpp
1>Linking...
1>Embedding manifest...

但是,当构建qtwinmigrate的修改版本时(原始版本的qtwinmigrate能够编译没有问题)

1>------ Rebuild All started: Project: qtdialog, Configuration: Release Win32 ------
1>Deleting intermediate and output files for project 'qtdialog', configuration 'Release|Win32'
1>Moc'ing qtpropertybrowserutils_p.h...
1>Moc'ing qteditorfactory.h...
1>Moc'ing qtvariantproperty.h...
1>Moc'ing qttreepropertybrowser.h...
1>Moc'ing qtpropertymanager.h...
1>Moc'ing qtpropertybrowser.h...
1>Moc'ing qtgroupboxpropertybrowser.h...
1>Moc'ing qtbuttonpropertybrowser.h...
1>Moc'ing qwinwidget.h...
1>Moc'ing qwinhost.h...
1>Compiling...
.
.
.
1>Compiling...
1>moc_qtpropertybrowserutils_p.cpp
1>moc_qteditorfactory.cpp
1>.\Release\moc_qteditorfactory.cpp(74) : error C2027: use of undefined type 'QtSpinBoxFactoryPrivate'
1>        c:\documents and settings\yan-cheng.cheok\my documents\downloads\qtwinmigrate-2.8-opensource\qtwinmigrate-2.8-opensource\examples\qtdll\release\../../../lib/qtpropertybrowser-2.5-opensource/src/qteditorfactory.h(97) : see declaration of 'QtSpinBoxFactoryPrivate'
1>.\Release\moc_qteditorfactory.cpp(74) : error C2227: left of '->slotPropertyChanged' must point to class/struct/union/generic type

我的问题是

  1. 为什么 qtpropertybrowser 只在 1 个文件中执行“Moc'ing”,而 qtwinmigrate 在这么多文件中执行“Moc'ing”?
  2. 为什么 qtpropertybrowser 只编译“moc_qtpropertybrowserutils_p.cpp”,而 qtwinmigrate 试图编译这么多“moc_....cpp”?

最佳答案

看起来你的两个 vcproj 文件没有相同的“moc”属性...它会导致使用 moc 的类出现奇怪的行为...

你是如何在第二个项目中生成vcproj文件的?

您是从 PRO 文件构建 vcproj 还是直接在 VS 中添加现有的 cpp/h 文件? 如果您从示例的 PRO 文件构建第一个示例,然后通过 VS 添加它们,将 cpp 文件复制到另一个 vcproj 中,那么 moc 属性可能出了问题...

在您的 vcproj 文件中,尝试查找“moc_”并查找两个文件之间的差异...我认为这将使您在查找问题根源的过程中更进一步...

希望对大家有所帮助

关于c++ - VC++ 2008下qtwinmigrate + qtpropertybrowser的编译组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1782068/

相关文章:

c++ - 在 Qt 图形 View 中锁定选择

c++ - 连接 const char * 字符串

c# - 领域驱动设计、.NET 和 Entity Framework

c# - 我可以告诉 Visual Studio 不要更改项目的 DPI 吗?

c++ - 从自定义小部件继承

c++ - 将抽象类型作为 Q_PROPERTY 公开给 QML

c++ - IE8打开网站流程

c++ - 多线程没有提高递归C++程序的性能

C99 临时局部数组变量的 C++ 版本

c++ - 如何在非托管 C++ 中使用 Enum::GetName