qt opengl QGLWidget inside QMainWindow

Hi, im doing some qt opengl programming in windows.

I need a window split in 2 pieces (right one must be an opengl window), with a top menu (file edit view favorites tools help thingy). In order to make the top menu there is a class that is derived from QMainWindow.

Question: How do I get a qt window that is split into 2 sections, with a top menu?

code I left off, its the opengl window that isn't willing to appear on screen:

MainWindow::MainWindow(QWidget *parent ,const char *name ) : QMainWindow(parent, name)
{
      createActions();
      createMenus();
      createToolbars();
      // no status bar


      
      // some frames
      QFrame* f1 = new QFrame( this, "frame1" );
      QFrame* f2 = new QFrame( this, "frame2" );
      QFrame* f3 = new QFrame( this, "frame3" );

    // Widget creation
      //createProgressBar();
      //createGLWidget();
      
      glWidget = new CGLWidget(f1, "glWidget");

      //createPanel();
      //QVBoxLayout *leftLayout = new QVBoxLayout;
      //QVBoxLayout *bottomRightLayout = new QVBoxLayout;
      //bottomRightLayout->addWidget(timeProgressBar);
      //      QVBoxLayout *rightLayout = new QVBoxLayout;
      //      rightLayout->addWidget(glWidget);
      //      rightLayout->addLayout(bottomRightLayout);
      QHBoxLayout *mainLayout = new QHBoxLayout(f1, 2, 2, "flayout1");
      mainLayout->addWidget(glWidget);

      
   

    //QHBoxLayout* flayout1 = new QHBoxLayout( f1, 2, 2, "flayout1");
    //flayout1->addWidget( GLView );
}

thanks in advance.
LVL 2
DaFouAsked:
Who is Participating?
 
rajeev_devinCommented:
Hi DaFou
I got the thing.
Are you using Qt4 or Qt3 ? From your code it seemd you are using Qt3.

You need to use two QDockWidget that will split your main window into two regions.
In Qt3 may be it is called QDockWindow. Just check this out.

Please mail again if you fase any problem.
0
 
rajeev_devinCommented:
You mean you want two top level windows ?
0
 
rajeev_devinCommented:
If you want the GL window to be top level then
Do something like this

QFrame* f1 = new QFrame( 0, "frame1" ); // 0 removed with this
...
glWidget = new CGLWidget(f1, "glWidget");
...
0
 
DaFouAuthor Commented:
No, i want to see a window derived from the QMainWindow class, splitted horizontal in two pieces and with the right one viewing opengl.

some header code for clarification:
#include <stdio.h> // printf
#include <qapplication.h>
#include "mainwindow.h"

int main(int argc, char* argv[])
{
      QApplication app(argc, argv);
      if(!QGLFormat::hasOpenGL())
            qFatal("This system has no OpenGL support.");
      MainWindow theWindow;
      app.setMainWidget(&theWindow);
      theWindow.show();
      return app.exec();
}



#if !defined(AFX_GLWIDGET_H__EED2A780_631B_438F_9B09_3F0E27084BBF__INCLUDED_)
#define AFX_GLWIDGET_H__EED2A780_631B_438F_9B09_3F0E27084BBF__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000


#include <qgl.h>

#include <gl/gl.h>
#include <gl/glu.h>
#include <gl/glut.h>

class CGLWidget : public QGLWidget  
{
public:
      CGLWidget(QWidget *parent = 0, const char * name = 0);
      virtual ~CGLWidget();

protected:
      void draw();
      void resizeGL(int width, int height);
      void initializeGL();
      void paintGL();
};

#endif // !defined(AFX_GLWIDGET_H__EED2A780_631B_438F_9B09_3F0E27084BBF__INCLUDED_)


#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "glwidget.h"

#include <qmainwindow.h>#include <qlabel.h>#bla blayout.h>

class MainWindow : public QMainWindow  
{

      Q_OBJECT
public:
      MainWindow(QWidget *parent = 0,const char *name = 0);
      virtual ~MainWindow();

private:
      bool modified;
      bool maybeSave();
      protected:
            void closeEvent(QCloseEvent *event);
            void contextMenuEvent(QContextMenuEvent *event);
      private slots:
            void newFile();
            void open();
            bool save();
            //bool saveAs();
            void about();
      private:
            void createProgressBar();
      // actions
      void createActions();
      QAction *newAct;
      QAction *openAct;
      //
      QAction *aboutAct;
      
      // menus
      void createMenus();
      QPopupMenu *fileMenu;
      QPopupMenu *editMenu;
      QPopupMenu *toolsMenu;
      QPopupMenu *aboutMenu;
            
      // progress bar
      QProgressBar *timeProgressBar;

      // timer
            int myTimerId;
      protected:
      void timerEvent(QTimerEvent *event);
      // toolbars
      void createToolbars();
      QToolBar *fileToolBar;
      QToolBar *editToolBar;
      QToolBar *toolsToolBar;
      QToolBar *helpToolBar;

      // save dialog
      void MaybeSave();

      // widgets
      CGLWidget *glWidget;
};

#endif // !defined(AFX_MAINWINDOW_H__F0827899_A2E2_4FE1_8E41_F9E0333F3B2F__INCLUDED_)
0
 
DaFouAuthor Commented:
QDockWindow works also but I have chosen to use the splitter. Thank you for your information on the domain of Qt3 I have used it to work out all posibilities.


// splitter
      horSplitter = new QSplitter(Horizontal, this);
      setCentralWidget(horSplitter);
      
// widgets
      leftWidget = new CLeftWidget(horSplitter);
      glWidget = new CGLWidget(horSplitter);

DaFou
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.