views:

150

answers:

2

I need to display a property browser under a MFC app.

I try to combine and compile the solution for the two

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/

I am using VC2009, QT 2009.04 with Visual Studio Add-On 1.1.1

Take note, under my machine, there are no problem for me to compile them successfully separately.

I copy, and add all exsiting CPP and HEADER files found in

qtpropertybrowser-2.5-opensource\src

into

qtwinmigrate-2.8-opensource\examples\qtdll

Here is how my new project looks like in the screen shoot (qtwinmigrate - windows at right most)

alt text

The qtpropertybrowser, is the project which I am able to compile with no problem :

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...

However, when come to build modified version of qtwinmigrate (original version of qtwinmigrate was able to compiled with no problem)

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

My questions is

  1. Why qtpropertybrowser just perform "Moc'ing" in 1 file, but qtwinmigrate perform "Moc'ing" in so many files?
  2. Why qtpropertybrowser just compile "moc_qtpropertybrowserutils_p.cpp", but qtwinmigrate try to compile so many "moc_....cpp"?
A: 

Hey,

It looks like your two vcproj files don't have the same "moc" properties... It can leads to strange behaviors with the classes that uses the moc...

How did you generate the vcproj file in the second project ?

Did you build both vcproj from the PRO files or just by adding the existing cpp/h files directly in VS ? If you build the first example from the example's PRO file then just copied the cpp files in another vcproj by adding them through VS, then something probably went wrong with moc properties...

In your vcproj files, try and look for "moc_" and look for differences between the two files... I think it will give you a further step in the process of finding the source of your problem...

I hope it helps a bit...

Andy M
A: 

1) Under Visual Studio 2008, go to Qt -> Open Qt Project File (.pro), open qtpropertybrowser.pro

2) Go to "simple" Properties, under Build Events -> Pre-Build Event, enter the following commands :

moc ..\..\src\qttreepropertybrowser.cpp > ..\..\src\qttreepropertybrowser.moc
moc ..\..\src\qtpropertymanager.cpp > ..\..\src\qtpropertymanager.moc
moc ..\..\src\qteditorfactory.cpp > ..\..\src\qteditorfactory.moc

3) Under C/C++ -> Additional Include Directories, enter the following path :

..\..\lib\qtwinmigrate\src

4) Under General -> Configuration Type, change to Dynamic Library (.dll)

5) Under Linker -> General -> Output File, change to \qtdialog.dll

6) Exclude original main.cpp from simple project. Add in main.cpp from

..\..\lib\qtwinmigrate\examples\qtdll

7) Add in all 3 cpp files and 3 header files from

..\..\lib\qtwinmigrate\src

8) Build all. qtdialog.dll will be generated.

9) Open up \lib\qtwinmigrate\examples\mfc\step1. Build all.

10) Move qtdialog.dll same directory as step1 generated exe. Run the application.

Yan Cheng CHEOK