QGraphicsView是可滚动的窗口部件,可以提供滚动条来浏览大的场景。如果需要使用OpenGL,则可以使用QGraphics View:setViewport()函数将视图设置为QGLWidget。 视图接收键盘和鼠标的输入事件,并将它们翻译为场景事件(将坐标转换为场景的坐标)。使用变换矩阵函数QGraphicsView::matrix()可以变换场景的坐标,实现场景缩放和旋转。
随后建立的是OpenGLView,这个OpenGLView是来自于QGraphicsView的,它的初始化和其祖先的并无二致,随后一句非常重要:setViewport(),它的作用是将QGLWidget设置为OpenGLView的viewport,这样的话背景的rendercontext不再是rastercontext而是OpenGLcontext了,否则场景的背景还是需要用CPU渲染的,效率低下。接着是两段建立连接的代...
为了使用 OpenGL 渲染,你要设置一个新的 QGLWidget 作为QGraphicsView 的视口 QGraphicsView::setViewPort()。假如你让 OpenGL 提供反锯齿功能,你需要 OpenGL 采样缓冲支持。 QGraphicsView view; view.setViewport(new QGLWidget(QGLFormat(QGL::SampleBuffers))); view.setViewportUpdateMode(QGraphicsView::FullViewp...
使用QOpenGLWidget作为QGraphicsView的视口,子类化一个QGraphicsItem,在该子类中使用OpenGL绘制一个3D模型,并且使用QPainter绘制文字和椭圆。具体代码如下: #pragmaonce#include<QGraphicsView>classQGraphicsScene;classQGraphicsWidget;classGraphicsView:publicQGraphicsView{Q_OBJECTpublic:GraphicsView(QWidget*parent=nullptr...
QGraphicsView为Graphics View框架提供了视图小部件,它可以可视化场景的内容。**可以为一个场景设置多个视图,用于对同一个数据提供不同的视口。而一个视图只能对应一个场景,后面设置的场景绘将前面的场景覆盖。**视图小部件是一个滚动区域,并提供滚动条用于在大型场景中导航。要启用OpenGL支持,可以通过调用QGraphicsView...
(1)Graphics View框架结构中,系统可以利用Qt绘图系统的反锯齿、OpenGL工具来改善绘图性能。 (2)Graphics View支持事件传播体系结构,可以使图元在场景(scene)中的交互能力提高1倍,图元能够处理键盘事件和鼠标事件。其中,鼠标事件包括鼠标按下、移动、释放和双击,还可以跟踪鼠标的移动。
首先,把QGLWidget绑定到QGraphicsView上,从而可以使用opengl进行渲染 1voidMYGraphicsView::setRenderGLWidget(QGLWidget *widget)2{3this->setViewport(widget);4this->setViewportUpdateMode(QGraphicsView::FullViewportUpdate);5} 1. 2. 3. 4. 5.
启用缓存后,项目的paint()函数通常会绘制到屏幕外的pixmap缓存中,对于任何后续重绘请求,Graphics View框架将从缓存中重绘。这种方法特别适用于QGLWidget,它将所有缓存存储为OpenGL纹理。 注意:启用缓存并不意味着只有在响应显式update()调用时才会调用item的paint()函数。例如,在内存压力下,Qt可能决定丢弃一些缓存信息;...
Qt中有一个非常炫的例子:Boxes,它展示了Qt能够让其Graphics–View框架和Qt的OpenGL模块结合起来,渲染出非常出色的效果。其实我私自认为凭这个程序,已经有很多游戏开发者关注Qt了,因为游戏开发一个非常常见的模块就是UI,一般情况下游戏引擎提供的UI模块比较弱,基本上都是游戏引擎+第三方GUI库进行结合的。但是Qt以其Gra...
class OpenGLView:public QGraphicsView,protected QOpenGLFunctions { Q_OBJECT public:OpenGLView(QWidget*pParent=0);virtual~OpenGLView(void);void setScene(GraphicsScene*pScene);publicslots:bool SwitchShader(const QString&shaderFileName);void SetLightPos(const QVector3D&lightPos=QVector3D());protected...