/*========================================================================= Program: Visualization Toolkit Module: TestWin32QVTKWidget.cxx Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen All rights reserved. See Copyright.txt or http://www.kitware.com/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notice for more information. =========================================================================*/ // Tests behavior of vtkWin32OpenGLRenderWindow under a QT Context. // @Note // opengl startup behaves differently when running // on a build server. This test tries to exercise areas that have // been known to fail but only in a local build. I.e. one cannot // trust the dashboard entry for this test unfortunately. #include "vtkSmartPointer.h" #include "QVTKWidget.h" #include "vtkWin32OpenGLRenderWindow.h" #include "vtkNew.h" #include "vtkRenderer.h" #include #include #include #include #include #include #define TOKEN_TO_STRING(TOK) # TOK #define STRINGIZE_TOKEN(TOK) TOKEN_TO_STRING(TOK) #define PRINT_AND_EVAL(X) {std::string fnc=__FUNCTION__;std::cout<setParent(tabWidget); return qvtk; } QVTKWidget* spawnSubwidget(QMainWindow* mainWin,QVTKWidget* qvtk = nullptr) { mainWindow = mainWin; if (!qvtk) qvtk = new QVTKWidget(mainWindow); qvtk->setMinimumSize(600, 400); mainWindow->setCentralWidget(qvtk); return qvtk; } QVTKWidget* spawnSubwidget(QDockWidget* dock,QVTKWidget* qvtk = nullptr) { if (!mainWindow) mainWindow = new QMainWindow(); dock->setParent(mainWindow); qvtk = new QVTKWidget(dock); qvtk->setMinimumSize(600, 400); dock->setWidget(qvtk); return qvtk; } int run() { //auto window = std::make_unique(); widget1 = new WidgetType1(); initializeWidget(widget1); QVTKWidget* qvtk = spawnSubwidget( widget1 ); qvtk->SetRenderWindow(glwin); PRINT_AND_EVAL("BEFORE RENDER:" << glwin->ReportCapabilities()); glwin->Render(); PRINT_AND_EVAL("AFTER RENDER1:" << glwin->ReportCapabilities()); flushQtEvents(); widget2 = new WidgetType2(); initializeWidget(widget2); QVTKWidget* qvtk1_ref = spawnSubwidget( widget2, qvtk ); qvtk1_ref->GetRenderWindow()->Render(); PRINT_AND_EVAL("AFTER RENDER2:" << glwin->ReportCapabilities()); flushQtEvents(); return EXIT_SUCCESS; } QPointer widget1; QPointer widget2; QPointer mainWindow; vtkNew glwin; vtkNew renderer; }; int TestWin32QVTKWidget(int argc, char* argv[]) { QApplication app(argc, argv); if( EXIT_SUCCESS != QVTKWidgetInsideQWidgets().run() ) return EXIT_FAILURE; if (EXIT_SUCCESS != QVTKWidgetInsideQWidgets().run()) return EXIT_FAILURE; if (EXIT_SUCCESS != QVTKWidgetInsideQWidgets().run()) return EXIT_FAILURE; return EXIT_SUCCESS; }