With the recent changes in Qt, it is now possible for us to have vtkRenderWindow within QGraphicsView. Infact we can now have vtkRenderWindow paint on to a QGLWidget viewport of QGraphicsView. Thats exactly what the vtkQtGraphicsViewRenderWindow class allows us to do.
The class is defined as follows
#ifdef Q_WS_WIN
#include "vtkWin32OpenGLRenderWindow.h"
typedef vtkWin32OpenGLRenderWindow vtkRenderWindowClass;
#endif
#ifdef Q_WS_X11
#include "vtkXOpenGLRenderWindow.h"
typedef vtkXOpenGLRenderWindow vtkRenderWindowClass;
#endif
class vtkQtGraphicsViewRenderWindow : public QGraphicsView,
public vtkRenderWindowClass
{
Q_OBJECT
public:
vtkQtGraphicsViewRenderWindow(QWidget* parent = 0);
~vtkQtGraphicsViewRenderWindow();
....
};Since vtkQtGraphicsViewRenderWindow is a subclass of both QGraphicsView and vtkRenderWindow,
- we can add any QGraphicsItem to its scene.
- we can use it as a drop-in replacement for vtkRenderWindow.
For example, take a look at the code below.
vtkRenderer* CreateVTKPipeline()
{
vtkRenderer* renderer = vtkRenderer::New();
// Omitted code that create a fractal terrain scene.
return renderer;
}
int main(int argc, char** argv)
{
QApplication a(argc, argv);
vtkRenderer* renderer = CreateVTKPipeline();
vtkQtGraphicsViewRenderWindow gView;
gView.AddRenderer( renderer );
gView.resize(800, 600);
gView.show();
QCalendarWidget* calendar = new QCalendarWidget;
calendar->setWindowOpacity(0.7);
QGraphicsProxyWidget* sceneWidget = new QGraphicsProxyWidget(0, Qt::Dialog);
sceneWidget->setWidget(calendar);
sceneWidget->setPos( -sceneWidget->boundingRect().topLeft() );
sceneWidget->setFlag(QGraphicsItem::ItemIsMovable);
sceneWidget->setCacheMode(QGraphicsItem::DeviceCoordinateCache);
sceneWidget->setWindowTitle("Calendar Widget");
QGraphicsScene* scene = gView.scene();
scene->addItem(sceneWidget);
return a.exec();
}Output of the above program becomes:

Whats cooler about the above program is that we can move and resize the translucent
QCalendarWidget - and have the background VTK scene updated!You can checkout a copy of the class and test program from here:
https://svn2.hosted-projects.com/vcreate
Username: anonymous
Password: anonymous
[Original Post from Abhishek Patil here: http://www.vcreatelogic.com/p/2010/06/us