"it should be a self-contained complete program."
do not you mean all the program ?
because as exemple "QOgreRenderWindow" containd many things have not relation with qt
Sory than what you mean by " self-contained complete program"
Edit : i work with ogre+qt , if you can integrate ogre i have not problem to give you version (code) that work with splitter and do not work when i add the groupbox (if i understand good the
" " self-contained complete program" that mean program where you can execute it and you can't execute it if you have not ogre)
else if it's just code where i have qt look
Qogrewidget have this member
#ifndef QOGREWIDGET_H
#define QOGREWIDGET_H
#include <QWidget>
#include <QVBoxLayout>
#include <QSplitter>
#include <QList>
#include <OGRE/Ogre.h>
#include "QOgreRenderWindow.h"
class QOgreRenderWindow;
class QOgreWidget
: public QWidget,
public Ogre
::FrameListener{
Q_OBJECT
public:
~QOgreWidget();
Ogre::Root *mRoot;
QList<QOgreRenderWindow*> getOgreWindows() { return mQOgreRenderWindowList; }
int nb_cam;
private:
Ogre::RenderWindow *mRenderWindow;
Ogre::SceneManager* mSceneMgr;
QList<QOgreRenderWindow*> mQOgreRenderWindowList;
int mainProcessID;
void init();
void initResources();
void createScene();
protected:
virtual bool frameStarted(const Ogre::FrameEvent& evt);
virtual bool frameEnded(const Ogre::FrameEvent& evt);
public slots:
void setViewNum(int num);
private:
Ogre::Vector3 cPosition;
Ogre::Entity* ogreCube;
Ogre::SceneNode* CubeNode;
};
#endif // QOGREWIDGET_H
#ifndef QOGREWIDGET_H
#define QOGREWIDGET_H
#include <QWidget>
#include <QVBoxLayout>
#include <QSplitter>
#include <QList>
#include <OGRE/Ogre.h>
#include "QOgreRenderWindow.h"
class QOgreRenderWindow;
class QOgreWidget : public QWidget, public Ogre::FrameListener
{
Q_OBJECT
public:
QOgreWidget(QWidget *parent = 0);
~QOgreWidget();
Ogre::Root *mRoot;
QHBoxLayout *mVerticalLayout;
QList<QOgreRenderWindow*> getOgreWindows() { return mQOgreRenderWindowList; }
int nb_cam;
private:
Ogre::RenderWindow *mRenderWindow;
Ogre::SceneManager* mSceneMgr;
QList<QOgreRenderWindow*> mQOgreRenderWindowList;
int mainProcessID;
void init();
void initResources();
void createScene();
void timerEvent(QTimerEvent* evt);
protected:
virtual bool frameStarted(const Ogre::FrameEvent& evt);
virtual bool frameEnded(const Ogre::FrameEvent& evt);
virtual void showEvent(QShowEvent *evt);
public slots:
void setViewNum(int num);
private:
Ogre::Vector3 cPosition;
Ogre::Entity* ogreCube;
Ogre::SceneNode* CubeNode;
};
#endif // QOGREWIDGET_H
To copy to clipboard, switch view to plain text mode
QOgreWidget
::QOgreWidget(QWidget *parent
) :
mSceneMgr(NULL)
{
mRenderWindow = NULL;
}void QOgreWidget::setViewNum(int num)
{
for(int i = 0;i<mQOgreRenderWindowList.count();i++)
{
delete mQOgreRenderWindowList.takeAt(i);
i--;
}
for(int i = 0; i<mVerticalLayout->count();i++)
{
delete mVerticalLayout->takeAt(i);
i--;
}
if(num == 1)
{
/* QWidget *central = new QGroupBox("My Scene", this);
mQOgreRenderWindowList.append(orw);
mVerticalLayout->addWidget(central);
mVerticalLayout->addWidget(orw); */QOgreRenderWindow
* orw
= new QOgreRenderWindow
(QString("View1"),mSceneMgr,mRoot,nb_cam
/*,central*/);
mVerticalLayout->addWidget(orw);
// mVerticalLayout->addWidget(central);
central->setLayout(mVerticalLayout);
}
//////////////////////
all the code here has relation with ogre not with qt
///////////////////////
void QOgreWidget::setViewNum(int num)//It is slot
{
Splitter->setOrientation(Qt::Vertical);
mVerticalLayout->addWidget(Splitter);
QRenderWindow *orw = new QRenderWindow(Splitter);
mQRenderWindowList.append(orw);
Splitter->addWidget(orw);
if(num == 4)
{
Splitter->setOrientation(Qt::Vertical);
Splitter2->setOrientation(Qt::Horizontal);
Splitter->addWidget(Splitter2);
Splitter3->setOrientation(Qt::Horizontal);
Splitter->addWidget(Splitter3);
mVerticalLayout->addWidget(Splitter);
QOgreRenderWindow *orw = new QOgreRenderWindow(Splitter2);
mQOgreRenderWindowList.append(orw);
Splitter2->addWidget(orw);
orw = new QOgreRenderWindow(Splitter3);
mQOgreRenderWindowList.append(orw);
Splitter3->addWidget(orw);
orw = new QOgreRenderWindow(Splitter3);
mQOgreRenderWindowList.append(orw);
Splitter3->addWidget(orw);
orw = new QOgreRenderWindow(Splitter3);
mQOgreRenderWindowList.append(orw);
Splitter3->addWidget(orw);
}
}
QOgreWidget::QOgreWidget(QWidget *parent) :
QWidget(parent),
mSceneMgr(NULL)
{
mRenderWindow = NULL;
mVerticalLayout = new QHBoxLayout(this);
}void QOgreWidget::setViewNum(int num)
{
for(int i = 0;i<mQOgreRenderWindowList.count();i++)
{
delete mQOgreRenderWindowList.takeAt(i);
i--;
}
for(int i = 0; i<mVerticalLayout->count();i++)
{
delete mVerticalLayout->takeAt(i);
i--;
}
if(num == 1)
{
/* QWidget *central = new QGroupBox("My Scene", this);
mQOgreRenderWindowList.append(orw);
mVerticalLayout->addWidget(central);
mVerticalLayout->addWidget(orw); */QOgreRenderWindow * orw = new QOgreRenderWindow(QString("View1"),mSceneMgr,mRoot,nb_cam/*,central*/);
mVerticalLayout->addWidget(orw);
QWidget *central = new QGroupBox("My Scene",orw);
// mVerticalLayout->addWidget(central);
central->setLayout(mVerticalLayout);
}
//////////////////////
all the code here has relation with ogre not with qt
///////////////////////
void QOgreWidget::setViewNum(int num)//It is slot
{
QSplitter *Splitter = new QSplitter(this);
Splitter->setOrientation(Qt::Vertical);
mVerticalLayout->addWidget(Splitter);
QRenderWindow *orw = new QRenderWindow(Splitter);
mQRenderWindowList.append(orw);
Splitter->addWidget(orw);
if(num == 4)
{
QSplitter *Splitter = new QSplitter(this);
Splitter->setOrientation(Qt::Vertical);
QSplitter *Splitter2 = new QSplitter(Splitter);
Splitter2->setOrientation(Qt::Horizontal);
Splitter->addWidget(Splitter2);
QSplitter *Splitter3 = new QSplitter(Splitter);
Splitter3->setOrientation(Qt::Horizontal);
Splitter->addWidget(Splitter3);
mVerticalLayout->addWidget(Splitter);
QOgreRenderWindow *orw = new QOgreRenderWindow(Splitter2);
mQOgreRenderWindowList.append(orw);
Splitter2->addWidget(orw);
orw = new QOgreRenderWindow(Splitter3);
mQOgreRenderWindowList.append(orw);
Splitter3->addWidget(orw);
orw = new QOgreRenderWindow(Splitter3);
mQOgreRenderWindowList.append(orw);
Splitter3->addWidget(orw);
orw = new QOgreRenderWindow(Splitter3);
mQOgreRenderWindowList.append(orw);
Splitter3->addWidget(orw);
}
}
To copy to clipboard, switch view to plain text mode
the class QOGRERENDERWINDOW
#ifndef QOGRERENDERWINDOW_H
#define QOGRERENDERWINDOW_H
#include <QWidget>
#include <QPaintEngine>
#include <QPaintEvent>
#include <QResizeEvent>
#include <OGRE/Ogre.h>
#include "my_interface.h"
class QOgreRenderWindow
: public QWidget{
Q_OBJECT
public:
QOgreRenderWindow
(QWidget *parent
= 0);
~QOgreRenderWindow();
private:
Ogre::SceneManager* mSceneMgr;
Ogre::RenderWindow* mRenderWindow;
Ogre::Camera *mCamera;
int nb_cam;
Ogre::Viewport* mVp;
Ogre::Root *mRoot;
void init();
void createOrbitalCamera();
protected:
virtual void keyReleaseEvent
(QKeyEvent* evt
);
};
#endif // QOGRERENDERWINDOW_H
#ifndef QOGRERENDERWINDOW_H
#define QOGRERENDERWINDOW_H
#include <QWidget>
#include <QPaintEngine>
#include <QPaintEvent>
#include <QResizeEvent>
#include <OGRE/Ogre.h>
#include "my_interface.h"
class QOgreRenderWindow : public QWidget
{
Q_OBJECT
public:
QOgreRenderWindow(QWidget *parent = 0);
~QOgreRenderWindow();
private:
QString mWindowName;
Ogre::SceneManager* mSceneMgr;
Ogre::RenderWindow* mRenderWindow;
Ogre::Camera *mCamera;
int nb_cam;
Ogre::Viewport* mVp;
Ogre::Root *mRoot;
void init();
void createOrbitalCamera();
protected:
virtual QPaintEngine* paintEngine() const { return 0; }
virtual void paintEvent(QPaintEvent* evt);
virtual void resizeEvent(QResizeEvent* evt);
virtual void keyPressEvent(QKeyEvent* evt);
virtual void keyReleaseEvent(QKeyEvent* evt);
virtual void mouseReleaseEvent(QMouseEvent* evt);
virtual void wheelEvent(QWheelEvent * evt);
};
#endif // QOGRERENDERWINDOW_H
To copy to clipboard, switch view to plain text mode
on mainwindow
MainWindow::MainWindow()
{
mQOgreWidget = new QOgreWidget(this);
setCentralWidget(mQOgreWidget);
}
void MainWindow::setViewNum(int num)
{
mQOgreWidget->setViewNum(num);
}
MainWindow::MainWindow()
{
mQOgreWidget = new QOgreWidget(this);
setCentralWidget(mQOgreWidget);
}
void MainWindow::setViewNum(int num)
{
mQOgreWidget->setViewNum(num);
}
To copy to clipboard, switch view to plain text mode
in main
int main(int argc, char **argv)
{
MainWindow window;
window.show();
window.setViewNum(1);
return app.exec();
}
int main(int argc, char **argv)
{
QApplication app(argc, argv);
MainWindow window;
window.show();
window.setViewNum(1);
return app.exec();
}
To copy to clipboard, switch view to plain text mode
that all my code that he has not relation with ogre (the rest is in ogre , c++) , that code with the code in ogre the result is an object in window (splitter ) or 4 view in each view i see my object
if i add groupbox(with the code in my first reply ) i do not see the object
I hope with this code i give you"self-contained complete program" (and i said to you i can give you version of my program with ogre)
Bookmarks