如何在qt中执行opengl

如何在qt中执行opengl,第1张

qt

可以通过QGLWidget运行opengl。QGLWidget继承QWidget,能够直接在里面调用opengl的接口。这个在qt文档里有具体说

明,也有相关例子,所以不赘述了。但是无法在正式软件里面执行,为什么?因为正式软件是用QGraphicsScene这个场景类 *** 作和 *** 作一切

item,而用QGraphicsView将其显示出来,而每一个item都是QGraphicsItem的子类。QGLWidget并不是QGraphicsItem类,我曾经尝试用普通的QWidget类那样,通过proxy来加进QGraphicsItem,但是没有成功。或许有方法,但是没有找到。

于是我放弃了用QGLWidget来 *** 作opengl的打算,寻找直接在QGraphicsItem中 *** 作opengl的方法。通过查看文档和示例代码,找到了这个方法:

1 往qt工程文件里添加opengl以及对应的lib。

2

对QGraphicsView进行一个三维对话框的指定,代码如下:

QGLWidget widget = new

QGLWidget(QGLFormat(QGL::SampleBuffers));

widget->makeCurrent();

QGraphicsView

view;

viewsetViewport(widget);

上述代码告诉了 QGraphicsView 类当前绘制的对象是支持opengl的。于是所有的场景中的item都将绘制到widget 上。

3

写一个QGraphicsItem的继承类,特别要重写paint函数。代码如下:

void XXX::paint(QPainter

painter, const QStyleOptionGraphicsItem option, QWidget

widget)

{

painter->beginNativePainting();

glColor3f(05,10,02);

glBegin(GL_TRIANGLES);

glVertex3f(1000,1000,-1000);

glVertex3f(1500, 1000,

-1000);

glVertex3f(1000, 1500,

-1000);

glEnd();

painter->endNativePainting();

}

上面这个函数主要是用opengl接口绘制了一个三角形。记住,在opengl绘制之前一定要执行painter->beginNativePainting()以及painter->endNativePainting()这两个语句。

QGraphicsScene、

QGraphicsView和QGraphicsItem的关系可以查阅相关文档,也不赘述了。

不过我按照这个方式画的三角形,怎么也在窗口上显示不出来,找了半天才发现问题在这个函数上QGraphicsItem::boundingRect()。这个函数是

干什么用的呢?主要用来返回该item的初始化大小,这个大小不会轻易改变,后续的改变都可以通过矩阵来完成,但是初始大小是不变的。QGraphicsView通过这个矩形来判断当前item是不是需要重绘,如果在重绘区外,则不调用重绘函数了。同时碰撞检测之类,也可以用这个矩形来判断。原来,item本身的矩阵外包框不对,所以才导致了重回不出来,改过来就正确了。

上面说的很潦草,具体怎么改的步骤就不说了。要想正确的绘制,必须得弄清楚坐标系的关系,QGraphicsScene、QGraphicsView以及QGraphicsItem这三个坐标系到底是什么关系。我看了文档,也自己进行了测试,但是感觉文档和测试的结果有些出入。具体出入不说了。说一下自己得心的吧。

先说明:涉及到一切大小和长度,都是像素大小,至少我测试的结果是这样的。

在建立QGraphicsScene

对象的时候,有一个构造函数是矩形,这个矩形是什么含义呢?经过测试,发现这个矩形并没有指定d出窗口的位置,比如,我把矩形的左上角点指定为

-1000,-1000,显示的位置和1000,1000是一样的,而长度则正确指定了(当然,可能会有滚动条)。所以,这个矩形的左上角点并不是显示的

窗口的位置,而是它在逻辑上的左上角点。我们显示一切item,都是以这个逻辑上的坐标系为准来绘制的。比如,左上角点是-1000,-1000,而

item的位置在-500,-500,则这个-500,-500相当于在显示窗口的左上角往下各加500个像素的坐标的位置。

那么 QGraphicsItem的boundingRect是什么意思呢?返回的是什么大小?是以什么坐标系显示的大小?首先,这个大小肯定是以像素为单位的,其次,这个矩形的坐标是以QGraphicsScene的逻辑坐标为准的。当然这个大小是没有任何矩阵叠加的大小。有了矩阵叠加后,实际的矩形可能会发生变化。假如在boundingRect中指定矩形的左上角为100,100,那么最终体现的位置则是QGraphicsScene逻辑坐标100,100的位置,如果QGraphicsScene的左上角点已经指定为-1000,-1000,那么这个位置实际上就是离窗口左上角点1100,1100的位置(由于有滚动条,所以也不一定是这个长度。)

那么在QGraphicsItem的paint函数中进行了opengl绘制用的是什么坐标呢?其实用的也是QGraphicsScene

的逻辑坐标。如上面的例子,绘制的直角三角形直角顶点是0,0,那么显示的位置就是距离显示窗口左上角点1000,1000的位置。不过opengl的所

有绘制都是没有矩阵叠加的基础上,如果用矩阵叠加,则显示的位置肯定和指定的有区别了。比如,我用setPos强制指定一个位置,这个位置将和opengl绘图坐标相叠加,最后显示到窗口上。我推测setPos其实是改变了矩阵,是一个平移矩阵。

Qt 是目前最先进、最完整的跨平台C++开发工具。它不仅完全实现了一次编写,所有平台无差别运行,更提供了几乎所有开发过程中需要用到的工具。如今, Qt 已被运用于超过70个行业、数千家企业,支持数百万设备及应用。

安装过程很简单,Qt在线安装程序让您可以选择只安装您需要的模块和工具。

1 创建一个Qt帐户

首先,创建一个 Qt 帐户。 通过此帐户,您可以访问 Web 门户来管理您的许可证以及访问论坛和 wiki。 另外,请确保您阅读了有关您选择的许可证的 Qt 许可页面。

2 下载安装程序

从下载页面 下载安装程序 。Qt官方最新版免费下载试用, 历史 版本下载,在线文档和帮助文件下载-慧都网

使用 Qt 在线安装程序,您可以安装 Qt、开发工具和其他组件的商业或开源版本,在线安装程序需要您的 Qt 帐户。 安装程序从服务器检索附加到帐户的许可证,并提供与该许可证对应的可用组件列表。

3 安装Qt

要完成安装,请选择要安装的组件并按照安装程序的说明进行 *** 作。

更新或删除组件:安装 Qt 后,您可以使用 下的维护工具来添加组件、更新或删除已安装的组件。

按照以下两个教程学习 Qt 和 Qt Quick 开发的基础知识,这些教程说明了如何创建简单的应用程序并在目标平台上构建和运行它们:

Qt Widgets 提供了一个 UI 元素库,允许您创建经典的桌面风格用户界面;Qt Quick是一个库,提供用于构建现代、流畅、动画UI的类型和功能。

平台页面中有针对不同平台开发应用的具体要求和说明。

有关更多信息,请访问supported platforms 页面。

设置windows窗口图标的方法:

this->(QIcon("myapppng"));

设置应用程序的方法:

1、在你的工程目录创建一个txt文档,写入:

IDI_ICON1ICON"appico"

2、重命名改文件为rc,比如apprc

3、在工程pro中添加如下代码

RC_FILE=apprc

4、拷贝一张ico的至工程目录,命名为appico,编译即可。

QtQuickWebGL可以玩qt电子。QtQuickWebGL。使用WebGL实现流媒体的Qt快速用户界面的平台插件。QtforINTEGRITY。GreenHillsSoftwareINTEGRITY实时 *** 作系统(支持于Qt59)。QtforUWP。通用Windows平台(UWP)的设备上运行Qt应用程序。QtforWebAssembly。在浏览器的安全沙箱中运行Qt应用程序。

以上就是关于如何在qt中执行opengl全部的内容,包括:如何在qt中执行opengl、C++图形用户界面开发框架Qt 6.1入门级教程 - 入门指南、在Qt中如何设置Windows应用程序的图标和窗口图标等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10172416.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存