33,311
社区成员
发帖
与我相关
我的任务
分享
GLScene::GLScene(QObject *parent) :
QGraphicsScene(parent)
, m_viewer(NULL)
, timer_id(0)
{
read1(); //读取文件
m_viewer = new osgViewer::Viewer;
m_viewer->setUpViewerAsEmbeddedInWindow(0, 0, 800, 600);//设置窗口的嵌入大小
m_viewer->setSceneData(root);
m_viewer->setCameraManipulator(new manip);
m_viewer->realize();//实例化GraphicsContext
timer_id = startTimer(0);//当定时器触发时,应用程序会发送一个QTimerEvent,如果参数为0,那么定时器事件每次发生时没有窗口系统事件处理。
}
GLView::GLView(QWidget *parent) :
QGraphicsView(parent)
, m_widget(new QGLWidget(QGLFormat(QGL::DoubleBuffer)))
, m_scene(new GLScene(this))
{
//设置视口大小
this->resize(800, 600);
//将m_widget设置为视口:为了使用OpenGL渲染,你要设置一个新的QGLWidget作为QGraphicsView的视口
this->setViewport(m_widget);
//鼠标追踪
m_widget->setMouseTracking(true);
this->viewport()->setMinimumSize(1, 1);
this->setScene(m_scene);
//设置视图的最小尺寸
this->setMinimumSize(1, 1);
//设置场景大小
this->scene()->setSceneRect(0, 0, this->width(), this->height());
//设置视图的更新方式:整个视图更新
this->setViewportUpdateMode(QGraphicsView::FullViewportUpdate);
}
ui.setupUi(this);
this->resize(800, 600);//MainWindow设置窗口大小
this->setCorner(Qt::BottomLeftCorner, Qt::LeftDockWidgetArea);
this->setCorner(Qt::BottomRightCorner, Qt::RightDockWidgetArea);
this->setCorner(Qt::TopLeftCorner, Qt::LeftDockWidgetArea);
this->setCorner(Qt::TopRightCorner, Qt::RightDockWidgetArea);
ui.gridLayout->setMargin(-1);
m_glview = new GLView(this);
//隐藏滚动条
m_glview->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
m_glview->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
this->layout()->addWidget(m_glview);