OpenSceneGraph/examples/osgviewerQtWidget
2009-06-19 11:31:15 +00:00
..
CMakeLists.txt
CompositeViewerQOSG.cpp
CompositeViewerQOSG.h
main.cpp
QOSGWidget.cpp
QOSGWidget.h
qosgwidget.pro
README
testMainWin.cpp
testMainWin.h
testMainWin.ui From Don Liech, Qt/OSG integration example 2009-06-19 11:31:15 +00:00
testOutboardWin.cpp
testOutboardWin.h
testOutboardWin.ui

This now builds with cmake if added to the osg examples tree.  A change to 
examples/CMakeLists.txt is also required.

It is also possible to build this stand alone with qmake using the .pro file.
I think I've made the .pro sufficiently generic to build anywhere.  The first
couple of lines in the file need to be adjusted for anyone's local environment.

This builds and runs on Linux and Win32 OK.   See status section.

Mac has some problems.  Qt was 4.4.2 and Mac OS X 10.5.2.  1) Had to adjust the
.pro file to hide QT_NO_DEBUG_OUTPUT or problems with a Frameworks header.  2)
Had to eliminate the outboard window to avoid a crash.  3) Only the lower-left
of the 4 views is OK.  The other 3 views filled with frame buffer garbage.  4)
Maximize twice and we loose the lower-left too.

My colleague Liz Martin collaborated on the design and did the Qt work.  
She is known for her copious comments.  -- Don Leich, Intelligent Light


Linux/Win32 builds (on Mac substitute make for gmake):

 gmake clean
 qmake qosgwidget.pro
 gmake



12/05/08 Status
---------------
o Implemented the skeleton of CompositeViewerQOSG and ViewQOSG (in
  QOSGWidget.cpp)

o In testMainWin.ui, osgGraphicsArea is a "promoted" widget: It is promoted to
  CompositeViewerQOSG

  CompositeViewerQOSG inherits from both QWidget and osgViewer::CompositeViewer

o ViewQOSG inherits from QOSGWidget (which inherits from QWidget) and
  osgViewer::View

o Bagged on allowing tab focus between the ViewQOSG widgets because:

  o on resizing, OSG's CompositeViewer sets the camera (and view) focus to its
    first osgViewer::View, which can create a disconnect between the Qt widget
    (ie ViewQOSG) that has the focus and is receiving keyboard events, and the
    actual ViewQOSG that the composite viewer acts on

  o From empirical observation, it didn't seem to matter which ViewQOSG
    received the keyboard event; the composite viewer applied the designated
    action to the view the composite viewer consider current

  o TAB focus would be given to a ViewQOSG even it had been completely
    collapsed via QSplitter action in the QMainWindow.  I was not successful
    in my attempts to modify this behavior.

12/15/08 Status
---------------

o  In this area, in testMainWin.ui, not only is osgGraphicsArea a promoted
   widget (to CompositeViewerQOSG), but the 4 subviews are now also promoted
   widgets, to ViewQOSG. 

o  I eliminated QOSGWidget::eventFilter().

o  In QOSGWidget::QOSGWidget(), I no longer take x, y, width, and height from
   the 'parent', I simply take it from itself.

Unfortunately, these changes don't help the Windows exe at all.  Linux
continues to run just fine.  But Windows doesn't see that TAB, and doesn't see
any *results* of the Key presses (Like 'l' to change lighting.)


5/15/09 Status
---------------

o  Applied Martin Beckett's fix for WIN32 event queue handling.

5/19/09 Status
---------------

o  Altered WIN32 event queue handling to not skip key events.

o  Got Mac to build and sort of run.  Qt is 4.4.2 and Mac OS X 10.5.2.  
1) Had to adjust the .pro file to hide QT_NO_DEBUG_OUTPUT or problems with
a Frameworks header.  2) Had to eliminate the outboard window to
avoid a crash.  3) Only the lower-left of the 4 views is OK.
The other 3 views filled with frame buffer garbage.  4) Maximize
twice and we loose the lower-left too.


6/18/09 Status
---------------

o Simon Loic provided cmake infrastructure and help me debug some cmake
configuration problems.  I needed to wipe my out-of-source object tree 
and start over explicitly defining QT version 4, ala:
  ccmake ../OpenSceneGraph-2.8.1  -DDESIRED_QT_VERSION=4

o Reimplemented QWidget::paintEngine to return 0 as recommended by doc.
This is purported to stop Qt from rendering anything in our windows.

o Eric Pouliquen recommended replacing setAttribute Qt::WA_PaintOnScreen
and Qt::WA_NoSystemBackground with Qt::WA_OpaquePaintEvent.  Seems best
if we add Qt::WA_OpaquePaintEvent, get rid of Qt::WA_NoSystemBackground,
but keep Qt::WA_PaintOnScreen.