QtFramework.cpp 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. /*
  2. * NICE-Core - efficient algebra and computer vision methods
  3. * - libimagedisplay - An imagedisplay/template for new NICE libraries
  4. * See file License for license information.
  5. */
  6. #include "core/imagedisplay/QtFramework.h"
  7. #include "core/imagedisplay/DefaultMainWindow.h"
  8. #include <GL/glut.h>
  9. namespace NICE {
  10. std::auto_ptr<QtFramework> QtFramework::theInstance;
  11. QtFramework::QtFramework()
  12. : application(NULL), mainWindow(NULL) {
  13. fake_argc = 0;
  14. fake_argv = new char * [1];
  15. fake_argv[0] = new char [2];
  16. fake_argv[0][0] = '.';
  17. fake_argv[0][1] = '\0';
  18. //application.reset(new QApplication(argc, argv));
  19. application = new QApplication(fake_argc, fake_argv);
  20. glutInit(&fake_argc, fake_argv);
  21. std::set_terminate(__gnu_cxx::__verbose_terminate_handler);
  22. }
  23. QtFramework::QtFramework(int& argc, char** argv)
  24. : application(new QApplication(argc, argv)), mainWindow(NULL) {
  25. fake_argv = NULL;
  26. glutInit(&argc, argv);
  27. std::set_terminate(__gnu_cxx::__verbose_terminate_handler);
  28. }
  29. QtFramework::~QtFramework() {
  30. // NOTE Qt widgets don't seem to enjoy being deleted
  31. // if (mainWindow != NULL) {
  32. // delete mainWindow;
  33. // mainWindow = NULL;
  34. // }
  35. // NOTE Qt's QApplication object doesn't seem to enjoy being deleted
  36. // if (application != NULL) {
  37. // delete application;
  38. // application = NULL;
  39. // }
  40. if ( fake_argv != NULL )
  41. {
  42. if ( fake_argv[0] != NULL )
  43. delete [] fake_argv[0];
  44. delete [] fake_argv;
  45. }
  46. }
  47. int QtFramework::nonstaticExec(bool showDefaultWindow) {
  48. //mainWindow.reset(new DefaultMainWindow("LImUn Qt Framework Application"));
  49. mainWindow = new DefaultMainWindow("LImUn Qt Framework Application");
  50. return doExec(showDefaultWindow);
  51. }
  52. int QtFramework::nonstaticExec(std::auto_ptr<QWidget> _mainWindow,
  53. bool showMainWindow) {
  54. //mainWindow = _mainWindow;
  55. mainWindow = _mainWindow.release();
  56. return doExec(showMainWindow);
  57. }
  58. int QtFramework::nonstaticExec(QWidget* _mainWindow, bool showMainWindow) {
  59. //mainWindow.reset(_mainWindow);
  60. mainWindow = _mainWindow;
  61. return doExec(showMainWindow);
  62. }
  63. int QtFramework::doExec(bool showMainWindow) {
  64. //application->setMainWidget(mainWindow.get());
  65. application->setMainWidget(mainWindow);
  66. if (showMainWindow) {
  67. mainWindow->show();
  68. }
  69. // application->connect(application.get(), SIGNAL(lastWindowClosed()),
  70. // application.get(), SLOT(quit()));
  71. return application->exec();
  72. }
  73. } // namespace