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?

[Product update] Infrastructure Analysis Tool is now available with Business Accounts.Learn More

x
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

rajeev_devinCommented:
You mean you want two top level windows ?
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");
...
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_)
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.

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
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
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Editors IDEs

From novice to tech pro — start learning today.