Qt主窗口中的OpenSceneGraph集成
我有以下代码,它是OpenSceneGraph()给出的用于将OSG与Qt集成的代码的修改: OSGViewer.hQt主窗口中的OpenSceneGraph集成,qt,opengl-es,openscenegraph,qtwidgets,qtopengl,Qt,Opengl Es,Openscenegraph,Qtwidgets,Qtopengl,我有以下代码,它是OpenSceneGraph()给出的用于将OSG与Qt集成的代码的修改: OSGViewer.h #ifndef OSGVIEWER_H #define OSGVIEWER_H #include <QTimer> #include <QApplication> #include <QGridLayout> #include <osgViewer/CompositeViewer> #include <osgViewer/
#ifndef OSGVIEWER_H
#define OSGVIEWER_H
#include <QTimer>
#include <QApplication>
#include <QGridLayout>
#include <osgViewer/CompositeViewer>
#include <osgViewer/ViewerEventHandlers>
#include <osgGA/MultiTouchTrackballManipulator>
#include <osgDB/ReadFile>
#include <osgQt/GraphicsWindowQt>
#include <QGLWidget>
class ViewerWidget : public QWidget, public osgViewer::CompositeViewer
{
public:
ViewerWidget(QWidget* parent = 0, osgViewer::ViewerBase::ThreadingModel threadingModel=osgViewer::CompositeViewer::SingleThreaded);
QWidget* addViewWidget( osgQt::GraphicsWindowQt* gw, osg::Node* scene );
osgQt::GraphicsWindowQt* createGraphicsWindow( int x, int y, int w, int h, const std::string& name="", bool windowDecoration=false );
virtual void paintEvent( QPaintEvent* event ) { frame(); }
QTimer _timer;
};
#endif // OSGVIEWER_H
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include "OSGViewer.h"
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
//void onCreateView();
private:
Ui::MainWindow *ui;
osg::ref_ptr<ViewerWidget> m_osgViewer_right, m_osgViewer_left;
};
#endif // MAINWINDOW_H
虽然我可以在我的主窗口中使用两个不同的QWidget渲染两个对象,但我总是在主窗口后面弹出另外两个单独的空窗口。如果关闭它们,则无法在主窗口中再渲染模型。有什么办法解决这个问题吗?我是OpenSceneGraph的新手
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include "OSGViewer.h"
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
//void onCreateView();
private:
Ui::MainWindow *ui;
osg::ref_ptr<ViewerWidget> m_osgViewer_right, m_osgViewer_left;
};
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
m_osgViewer_left = new ViewerWidget(this);
ui->left = m_osgViewer_left->addViewWidget(m_osgViewer_left->createGraphicsWindow(0,0,100,100), osgDB::readNodeFile("cessnafire.osg") );
m_osgViewer_left->show();
m_osgViewer_right = new ViewerWidget;
ui->right = m_osgViewer_right->addViewWidget(m_osgViewer_right->createGraphicsWindow(0,0,100,100), osgDB::readNodeFile("cow.osgt") );
m_osgViewer_right->show();
ui->gridLayout->addWidget( ui->left, 0, 0 );
ui->gridLayout->addWidget( ui->right, 0, 2 );
}
/* ------------------------------------------------------- */
MainWindow::~MainWindow()
{
delete ui;
}