我需要在 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 - 最右边的窗口)
(来源: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
我的问题是
- 为什么 qtpropertybrowser 只在 1 个文件中执行“Moc'ing”,而 qtwinmigrate 在这么多文件中执行“Moc'ing”?
- 为什么 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/