QT在QGraphicsView中使用opengl不能够刷新的解决方案

合集下载

clgetplatformids returned unknown error code

clgetplatformids returned unknown error code

您遇到的问题与OpenCL环境的配置有关。

clGetPlatformIDs()函数返回的错误代码-1001对应于状态宏CL_PLATFORM_NOT_FOUND_KHR,这通常意味着系统上没有找到可用的OpenCL平台。

以下是可能的解决方案:
安装OpenCL驱动和库:确保您的系统上安装了正确的OpenCL驱动和库。

这通常包括与您的GPU或CPU兼容的驱动和库。

检查环境变量:确保OpenCL相关的环境变量(如PATH或LD_LIBRARY_PATH)已正确设置,以便系统可以找到OpenCL库。

检查设备支持:使用clinfo工具检查系统上的OpenCL设备是否被正确识别。

确保您的硬件支持OpenCL,并且驱动程序已正确安装。

更新驱动程序和固件:确保您的GPU驱动程序和固件是最新的,有时候这可以解决兼容性问题。

检查文档和社区支持:查阅特定硬件或软件的官方文档,或在相关社区和论坛中搜索类似的问题。

可能有人遇到了相同的问题,并找到了解决方案。

联系技术支持:如果上述方法都不能解决问题,可能需要联系您的硬件供应商或OpenCL软件供应商的技术支持寻求帮助。

在处理此类问题时,请注意查阅相关的技术文档和社区论坛,以获得最准确和最新的解决方案。

qgraphicsview用法 -回复

qgraphicsview用法 -回复

qgraphicsview用法-回复QGraphicsView是Qt框架中的一个用于展示2D图形的控件,它允许开发者创建能够交互的用户界面,并且可以在其上绘制自定义的图形。

本文将一步一步地回答关于QGraphicsView控件的用法,帮助读者了解如何在其上展示图形,实现交互操作等。

1. 引入必要的头文件和命名空间在使用QGraphicsView之前,需要引入两个必要的头文件:QGraphicsView和QGraphicsScene。

QGraphicsView用于显示场景,而QGraphicsScene则相当于绘图的画布。

#include <QGraphicsView>#include <QGraphicsScene>2. 创建QGraphicsView对象并设置场景在主窗口的构造函数中,我们可以创建一个QGraphicsView对象,并将其设置为主窗口的中心部件。

QGraphicsView* view = new QGraphicsView(this); setCentralWidget(view);接下来,我们可以创建一个QGraphicsScene对象,并将其设置为QGraphicsView的场景。

QGraphicsScene* scene = new QGraphicsScene(this);view->setScene(scene);3. 添加图形到场景中在场景中添加图形是QGraphicsView的一个重要功能。

我们可以使用QGraphicsScene提供的方法,如addRect、addEllipse等,来添加不同类型的图形。

QGraphicsRectItem* rect = scene->addRect(0, 0, 100, 100); QGraphicsEllipseItem* ellipse = scene->addEllipse(0, 0, 100, 100);通过调用这些方法,我们可以在场景中添加矩形、椭圆等各种形状。

OpenGL编程低级错误及常见问题解答

OpenGL编程低级错误及常见问题解答

OpenGL编程低级错误及常见问题解答低级错误1.没有glDisable(GL_TEXTURE_2D),导致基本几何作图全部失败。

2.镜头位置没调好,导致所有物体不可见.3.物体位置数据错误,导致物体大大超出镜头显示范围.4.纹理没有GL_CLAMP导致边界拼接出现缝线.5.纹理没有GL_REPEA T导致使用超出1.0纹理坐标技巧失败,显示单色插值.6.没有glEnable(GL_TEXTURE_2D)导致全白纹理.7.glEnable(GL_TEXTURE_2D)后没有使用纹理顶点导致如glColor效果的纯单色.8.应该在作图循环设置灯光位置,因为The?position?is?transformed?by?the?modelview?matrix?when?glLight?is?called?(just?as?if?it?w ere?a?point),?and?it?is?stored?in?eye?coordinates.?9.灯光位置应该是4个float,3个float程序不出错,但结果完全扭曲。

10.打开灯光却没设置顶点法线,到头一场空。

11.Window Class 没有CS_OWNDC,导致glDrawPixels失败,如在子窗口V iew上进行象素写入操作.12.没有设置PIXELFORMA TDESCRIPTOR的cAlphaBits=8,导致glReadPixels读取alpha通道数据失败,统统为0.13.手动实现的多层纹理闪烁,出现线带,没有使用glPolygonOffset.14.glDrawPixels格式GL_RGB或GL_BGR_EXT的数据时崩溃,且数据有效,没有使用glPixelStorei(GL_UNPACK_ALIGNMENT, 1);导致图像行默认4字节对齐,导致OpenGL数据读取越界崩溃.相应的要为glReadPixels设置glPixelStorei(GL_PACK_ALIGNMENT, 1); 15.glReadPixel读取被覆盖的OpenGL窗口部分的图像数据时,读出数据混乱无效,OpenGL Pixel Ownership检测导致,标准如此.使用PixelBuffer,或强制置前OpenGL窗口解决.16.glReadPixels读取总是从FrameBuffer的左下往右上读取,毫无参数可设置改变方向,真是笨到家了. 载入图像一般还是从上到下比较容易理解.17.使用glDepthMask(GL_FALSE)后不打开,glClear无法清除深度缓冲,导致现象:场景起始静止正常,一旦移动出现不规则的透明无渲染区域,深度缓存逻辑混乱.18.gluPerspective(45.0f, (GLfloat)cxPixels/(GLfloat)cyPixels, 0.1f, 2000.0f);这里的0.1f将导致物体和地面的相交处闪烁,原因待查,至少取1.0f.19.没有显示定义shiniess或shiniess为0,在shader中对gl_FrontMaterial.shininess使用pow 计算,结果不可测,黑色条带闪烁,quite not understand.常见错误问:OpenGL中的Stencil Buffer是什么东西?答:模板缓存(Stencil Buffer)。

Qt图形视图、动画、状态机框架

Qt图形视图、动画、状态机框架

Graphics View的坐标系统
3.图形项坐标
QGraphicsItem类的坐标系,若在调用QGraphicsItem类的paint()函数重绘图元 时,则以此坐标系为基准。它的坐标都以点(0,0)为中心点,这也是所有变换的中 心点。 图形项位置指的是图形项的中心点在它父亲的坐标系中的坐标。如无父亲图 形项,则选场景坐标系。以这种思想来看,场景指的就是那些祖先最少的图形项 的“父亲”。最上级的图形项位置就是在场景中的位置。 子图形项会随着父图形项的变换而变换。(一起缩放,一起旋转等)。
e
Graphics View的坐标系统
2.视图坐标
QGraphicsView类继承自QWidget类,因此它与其他的QWidget类一样,以窗口 的左上角作为自己坐标系的原点,如图所示。 视图坐标是widget的坐标,视图坐标中每个单位对应一个像素。这种坐标的 特殊之处在于它是相对于widget或是视口的,不会被所观察的场景所影响。 QGraphicsView的视口的左上角总是(0,0),右下角总是(视口宽,视口高)。 所有的鼠标事件与拖拽事件,最初以视图坐标表示,需要把这些坐标映射到场景 坐标以便与图形项交互。
Graphics View的坐标系统
1.场景坐标
QGraphicsScene类的坐标系以中心为原点(0,0),如图所示。 场景坐标系统描述了每个最顶级图形项的位置,也是从视图向场景投递场景 事件的基础。场景中的每个图形项有场景位置与包围矩形 (QGraphicsItem ::scenePos(), QGraphicsItem::sceneBoundingRect()), 另外,它有 自己本地图形项位置与包围矩形。场景位置描述了图形项在场景坐标下的位置, 它的场景包围矩形则用于QGraphicsScene决定场景中哪块区域发生了变化。场景 中的变化通过QGraphicsScene::changed ()信号来通知,它的参数是场景矩形列表。

QT--QChart画折线图

QT--QChart画折线图

QT--QChart画折线图First:最终效果本⽂最后将会实现如下效果:1 、添加charts模块Qt Charts作为⼀个独⽴的模块,在使⽤前需要在项⽬的pro⽂件中添加:QtExample.pro:# 添加Qt charts模块QT += charts2 、包含charts头⽂件并引⽤QT charts命名空间main.cpp:// 包含line chart需要的头⽂件#include <QChartView>#include <QLineSeries>// 引⽤命名空间QT_CHARTS_USE_NAMESPACEint main(){...}3 、创建QLineSeries并添加数据// new ⼀个 QLineSeries实例QLineSeries *series = new QLineSeries();// 添加实验数据,可以⽤ append ⽅法或者 >> 操作符series->append(0,2);series->append(QPointF(2,6));series->append(3,8);series->append(7,9);series->append(11,3);//or*series << QPointF(11,2) << QPointF(15,5) << QPointF(18,4) << QPointF(19,2);4 、创建QChart⽤于显⽰数据创建好series后,需要创建⼀个QChart实例并关联series,创建坐标才能将数据显⽰出来:main.cpp:QChart *chart = new QChart();// 将图例隐藏chart->legend()->hide();// 关联series,这⼀步很重要,必须要将series关联到QChart才能将数据渲染出来:chart->addSeries(series);// 开启OpenGL,QLineSeries⽀持GPU绘制,Qt其他有的图表类型是不⽀持的。

Qt图片显示QGraphicsView(转载)

Qt图片显示QGraphicsView(转载)

Qt图⽚显⽰QGraphicsView(转载)原⽂来⾃:Graphics View提供了⼀个界⾯,它既可以管理⼤数量的定制2D graphical items,⼜可与它们交互,有⼀个view widget可以把这些项绘制出来,并⽀持旋转与缩放。

这个柜架也包含⼀个事件传播结构,对于在scene中的这些items,它具有双精度的交互能⼒。

Items能处理键盘事件,⿏标的按,移动、释放、双击事件,也可以跟踪⿏标移动。

Graphics View使⽤BSP树来提供对item的快速查找,使⽤这种技术,它可以实时地绘制⼤规模场景,甚⾄以百万items计。

Graphics View在Qt 4.2中被引⽤,它替代了它的前辈QCanvas。

Graphics View的体系结构Graphics View提供的是⼀种类似于Qt model-view的编程。

多个views可以监视同⼀个场景,⽽场景包含多个具有多种⼏何外形的items。

场景QGraphicsScene 表⽰Graphics View中的场景,它有以下职责:为管理⼤量的items提供⼀个快速的接⼝。

传播事件到每个item。

管理item的状态,例如选择,焦点处理。

提供未经变换的渲染功能,主要⽤于打印。

场景作为QGraphicsItem对象的容器。

通过调⽤QgraphicsScene::addItem()把这些Items加⼊到场景中。

可以使⽤众多的查找函数来获取特定的items。

QGraphicsScene:items()与它的许多重载函数可获取那些与点、矩形,多边形,向量路径等相交或是有包含有关系的items。

QGraphicsScene::itemAt()返回特定上最顶端的item。

所有的item查找函数都以出栈序列返回(也就是说,第⼀个返回的是最顶端的,最后⼀个返回的是最底端的)。

QGraphicsScene scene;QGraphicsRectItem *rect=scene.addRect(QRectF(0,0,100,100));QGraphicsItem *item=scene.itemAt(50,50);//item==rect;QGraphicsScene的事件传播结构会把场景事件投递到items,也管理多个items之间的传递。

第8章 图形视图(GraphicsView)框架


1.场景坐标 场景坐标是所有图元的基础坐标系统。场景坐标系统描述了顶层的图元, 每个图元都有场景坐标和相应的包容框。场景坐标的原点在场景中心,坐标原 点是X轴正方向向右,Y轴正方向向下。 QGraphicsScene类的坐标系是以中心为原点(0,0),如图8.2所示。
2.视图坐标 视图坐标是窗口部件的坐标。视图坐标的单位是像素。QGraphicsView视口 的左上角是(0,0),X轴正方向向右,Y轴正方向向下。所有的鼠标事件最开始 都是使用视图坐标。 QGraphicsView类继承自QWidget类,因此它和其他的QWidget类一样以窗口 的左上角作为自己坐标系的原点,如图8.3所示。
3.图元坐标 图元使用自己的本地坐标,这个坐标系统通常以图元中心为原点,这也是所 有变换的原点。图元坐标方向是X轴正方向向右,Y轴正方向向下。创建图元后, 只需要注意图元坐标就可以了,QGraphicsScene和QGraphicsView会完成所有的变 换。 QGraphicsItem类的坐标系,在调用QGraphicsItem类的paint()函数重画图元时 则以此坐标系为基准,如图8.4所示。
Graphics View框架结构主要包含了场景类(QGraphicsScene)、视图类 (QGraphicsView)和图元类(QGraphicsItem)。场景类提供了一个用于管理位 于其中的众多图元容器,视图类用于显示场景中的图元,一个场景可以通过多 个视图表现,一个场景包括多个几何图形。它们三者之间的关系可用图8.1表示。
场景类:QGraphicsScene类 它是一个用于放置图元的容器,本身是不可见的,必须通过与之相连的视图 类来显示及与外界进行互操作。通过QGraphicsScene::addItem()可以加入一个图 元到场景中。图元可以通过多个函数进行检索。QGraphicsScene::items()和一些重 载函数可以返回和点、矩形、多边形或向量路径相交的所有图元。 QGraphicsScene::itemAt()返回指定点的最顶层图元。 视图类:QGraphicsView类 它提供一个可视的窗口,用于显示场景中的图元。在同一个场景中可以有多 个视口,也可以为相同的数据集提供几种不同的视口。 QGraphicsView是可滚动的窗口部件,可以提供滚动条来浏览大的场景。如 果需要使用OpenGL,可以使用QGraphicsView::setViewport()将视口设置为 QGLWidget。

known issues with graphics drivers -回复

known issues with graphics drivers -回复[已知的图形驱动程序问题]引言:图形驱动程序是计算机系统中至关重要的组成部分,它负责控制图形处理器(GPU)的功能,从而在屏幕上显示图像和视频。

然而,正如任何软件一样,图形驱动程序也可能存在一些已知问题。

本文将逐步回答这些问题,并提供相关解决方案。

第一部分:概述图形驱动程序问题(150-200字)在本部分,我们将简要介绍图形驱动程序问题的一般概述,并阐明为什么解决这些问题非常重要。

第二部分:常见的图形驱动程序问题(400-500字)在这一部分,我们将详细讨论一些常见的图形驱动程序问题。

这些问题可能包括黑屏、闪烁、低分辨率、花屏和崩溃等。

第三部分:解决图形驱动程序问题(500-600字)在这一部分,我们将介绍一些解决图形驱动程序问题的方法。

这些方法可能包括更新驱动程序、重新安装驱动程序、降低硬件加速级别和调整显示设置等。

第四部分:预防图形驱动程序问题(300-400字)在本部分,我们将讨论一些预防图形驱动程序问题的措施。

这些措施可能包括定期更新驱动程序、避免过度超频和定期清理系统等。

第五部分:结论(150-200字)在本部分,我们将总结前面讨论的内容,并强调解决和预防图形驱动程序问题的重要性。

第一部分:概述图形驱动程序问题图形驱动程序是计算机系统中必不可少的组件,通过它,操作系统可以与图形处理器(GPU)进行通信。

这使得用户可以在屏幕上看到图像和视频。

然而,正如其他软件一样,图形驱动程序也可能存在一些已知问题。

这些问题可能导致系统崩溃、显示异常或性能下降。

因此,解决这些问题是非常重要的,以确保计算机系统的正常运行和图形显示的稳定性。

第二部分:常见的图形驱动程序问题1.黑屏:黑屏问题可能由于与驱动程序的兼容性问题或错误安装驱动程序导致。

此外,硬件故障或操作系统的问题也可能导致黑屏。

2.闪烁:屏幕闪烁问题可能由于帧率不匹配或显示器配置错误引起。

OpenGL问题

OpenGL问题1.MSVCRTD.lib(crtexe.obj) : error LNK2019: 无法解析的外部符号 _main,该符号在函数 ___tmainCRTStartup项目》连接》系统》子系统改成windows一,问题描述MSVCRTD.lib(crtexew.obj) : error LNK2019: 无法解析的外部符号 _WinMain@16,该符号在函数 ___tmainCRTStartup 中被引用Debug\jk.exe : fatal error LNK1120: 1 个无法解析的外部命令error LNK2001: unresolved external symbol _WinMain@16debug/main.exe:fatal error LNK 1120:1 unresolved externals error executing link.exe;二,原因及解决办法产生这个问题的真正原因是c语言运行时找不到适当的程序入口函数,一般情况下,如果是windows程序,那么WinMain是入口函数,在VS2008中新建项目为“win32项目”如果是dos控制台程序,那么main是入口函数,在VS2008中新建项目为“win32控制台应用程序”而如果入口函数指定不当,很显然c语言运行时找不到配合函数,它就会报告错误。

修改设置适应你的需求如果是windows程序:1.菜单中选择 Project->Properties, 弹出Property Pages窗口2.在左边栏中依次选择:Configuration Properties->C/C++->Preprocessor,然后在右边栏的Preprocessor Definitions对应的项中删除_CONSOLE, 添加_WINDOWS.3.在左边栏中依次选择:Configuration Properties->Linker->System,然后在右边栏的SubSystem对应的项改为Windows(/SUBSYSTEM:WINDOWS)如果是控制台程序:1.菜单中选择 Project->Properties, 弹出Property Pages窗口2.在左边栏中依次选择:Configuration Properties->C/C++->Preprocessor,然后在右边栏的Preprocessor Definitions对应的项中删除_WINDOWS, 添加_CONSOLE.3.在左边栏中依次选择:Configuration Properties->Linker->System,然后在右边栏的SubSystem对应的项改为CONSOLE(/SUBSYSTEM:CONSOLE)error LNK2019: 无法解析的外部符号 ___glutInitWithExit@12,该符号在函数_glutInit_ATEXIT_HACK@8 中被引用1>GEARS.obj : error LNK2019: 无法解析的外部符号___glutCreateWindowWithExit@8,opengl的高级菜鸟问题1. 看了一本书《OpenGL三维图形系统开发与应用技术》,但是,其中涉及到glut.h文件的函数无法正常连接,典型的错误如下:2.------ 已启动生成: 项目: gears, 配置: Debug Win32 ------3.1>正在链接...4.1>GEARS.obj : error LNK2019: 无法解析的外部符号___glutInitWithExit@12,该符号在函数 _glutInit_ATEXIT_HACK@8 中被引用5.1>GEARS.obj : error LNK2019: 无法解析的外部符号___glutCreateWindowWithExit@8,该符号在函数_glutCreateWindow_ATEXIT_HACK@4 中被引用6.1>.\Debug/gears.exe : fatal error LNK1120: 2 个无法解析的外部命令7.1>生成日志保存在“file://c:\vcprog\OpenGL\book\Chapter03\GEARS\Debug\Build Log.htm” 8.1>gears - 3 个错误,0 个警告9.========== 生成: 0 已成功, 1 已失败, 0 最新, 0 已跳过 ==========10.11.反复思考,也没有找到答案,网上也有说类似问题的,但是竟然没有这方面的解决方案,今天看了glut.h的文件内容,glut.h的注释竟然就写着如下内容:12. Note that the __glut*WithExit routines should NEVER be called directly.13. To avoid the atexit workaround, #define GLUT_DISABLE_ATEXIT_HACK.14.于是,在#include 前面加上了一句:15.#define GLUT_DISABLE_ATEXIT_HACK16.17.再次链接,一切正常。

Qt的Graphics-View框架和OpenGL结合详解

Qt的Graphics-View框架和OpenGL结合详解Qt的Graphics-View框架和OpenGL结合详解演⽰程序下载地址:程序源代码下载地址:这是⼀篇纯技术⽂,介绍了这⼀个⽉来我抽时间研究的成果。

Qt中有⼀个⾮常炫的例⼦:Boxes,它展⽰了Qt能够让其Graphics–View框架和Qt的OpenGL模块结合起来,渲染出⾮常出⾊的效果。

其实我私⾃认为凭这个程序,已经有很多游戏开发者关注Qt了,因为游戏开发⼀个⾮常常见的模块就是UI,⼀般情况下游戏引擎提供的UI模块⽐较弱,基本上都是游戏引擎+第三⽅GUI库进⾏结合的。

但是Qt以其Graphics–View框架能够⾮常轻松地将UI控件嵌⼊场景中,⽽且能够和OpenGL底层共存,更重要的是,凭借着Qt的qss,Qt可以定制许多GUI元素,这是⾮常具有吸引⼒的。

所以说,如果⼤家对游戏开发感兴趣,那么不妨看⼀下Qt。

好了,下⾯介绍⼀下前⼏天我制作并发布的⼀个demo。

这个demo是对Boxes这个例⼦进⾏模仿,结合学习《OpenGL超级宝典》,制作⽽成的,由于最近⽐较忙,所以总共花了将近⼀个⽉才完成,不得不说效率有点⼉低。

⾸先从MainWindow.cpp这个⽂件说起吧,⼀开始是要初始化MainWindow类的,这个类是继承QMainWindow的,这⾥重点说说它的构造函数:MainWindow::MainWindow(QWidget*pParent):QMainWindow(pParent){QGLWidget*pWidget=new QGLWidget(QGLFormat(QGL::SampleBuffers),this);pWidget->makeCurrent();//scene的内容GraphicsScene*pScene=new GraphicsScene(this);OpenGLView*pView=new OpenGLView(this);pView->setViewport(pWidget);pView->setViewportUpdateMode(QGraphicsView::FullViewportUpdate);pView->setScene(pScene);//选择不同的着⾊器的时候进⾏着⾊器连接connect(pScene,SIGNAL(SwitchShader(const QString&)),pView,SLOT(SwitchShader(const QString&)));connect(pScene,SIGNAL(SetLightPos(const QVector3D&)),pView,SLOT(SetLightPos(const QVector3D&)));setCentralWidget(pView);setWindowTitle(tr("Lightforshader"));resize(640,360);}⾸先在我们创建了⼀个QWidget,然后调⽤makeCurrent()成员函数,其实意思是让它的rendercontext设为当前的rendercontext。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档