qt opengl QGLWidget inside QMainWindow

Posted on 2006-03-23
Last Modified: 2013-11-23
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)
      // 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
      glWidget = new CGLWidget(f1, "glWidget");

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


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

thanks in advance.
Question by:DaFou
    LVL 12

    Expert Comment

    You mean you want two top level windows ?
    LVL 12

    Expert Comment

    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");
    LVL 2

    Author Comment

    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);
                qFatal("This system has no OpenGL support.");
          MainWindow theWindow;
          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  
          CGLWidget(QWidget *parent = 0, const char * name = 0);
          virtual ~CGLWidget();

          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  

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

          bool modified;
          bool maybeSave();
                void closeEvent(QCloseEvent *event);
                void contextMenuEvent(QContextMenuEvent *event);
          private slots:
                void newFile();
                void open();
                bool save();
                //bool saveAs();
                void about();
                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;
          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_)
    LVL 12

    Accepted Solution

    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.
    LVL 2

    Author Comment

    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);
    // widgets
          leftWidget = new CLeftWidget(horSplitter);
          glWidget = new CGLWidget(horSplitter);


    Write Comment

    Please enter a first name

    Please enter a last name

    We will never share this with anyone.

    Featured Post

    Free Trending Threat Insights Every Day

    Enhance your security with threat intelligence from the web. Get trending threat insights on hackers, exploits, and suspicious IP addresses delivered to your inbox with our free Cyber Daily.

    Suggested Solutions

    Templates For Beginners Or How To Encourage The Compiler To Work For You Introduction This tutorial is targeted at the reader who is, perhaps, familiar with the basics of C++ but would prefer a little slower introduction to the more ad…
    Programmer's Notepad is, one of the best free text editing tools available, simply because the developers appear to have second-guessed every weird problem or issue a programmer is likely to run into. One of these problems is selecting and deleti…
    The viewer will learn additional member functions of the vector class. Specifically, the capacity and swap member functions will be introduced.
    The viewer will be introduced to the technique of using vectors in C++. The video will cover how to define a vector, store values in the vector and retrieve data from the values stored in the vector.

    737 members asked questions and received personalized solutions in the past 7 days.

    Join the community of 500,000 technology professionals and ask your questions.

    Join & Ask a Question

    Need Help in Real-Time?

    Connect with top rated Experts

    19 Experts available now in Live!

    Get 1:1 Help Now