QT openGL 学习笔记
QT + openGL
openGLWdiget 控件 重载 keyPressEvent 不起作用
需要在构造函数中设置聚焦策略
1 | setFocusPolicy(Qt::TabFocus); |
QT openGL 主要函数
1:initializeGL()函数只在程序开始时运行一次,之后不会再运行
2:resizeGL()只在在窗口尺寸发生变化时,会自动运行,然后触发paint事件,从而调用paintGL()事件处理函数
3:paintGL()会在窗口位置移动时被调用,或是窗口在隐藏和显示之间变换时,被调用
4.updateGL()功能是触发paintGL()
查看显卡信息
世界上有很多显卡制造商如NVIDIA,AMD,Intel,SGI。也有很多操作系统如Windows,Linux,MacOS,还有其他类Unix系统等等。如果NVIDIA针对Windows开发一套显卡驱动API供游戏图形软件等应用程序使用,然后又针对Linux开发另一套API。这样AMD开发两套Intel开发两套SGI又开发两套,各自有不同的API给游戏厂商使用,显然对游戏开发商学习使用成本太高了。于是SGI牵头联合其他显卡与计算机制造商共同制定同一套API规则,供游戏厂商方便使用。OpenGL一般被认为是一个API(Application Programming Interface, 应用程序编程接口),包含了一系列可以操作图形、图像的函数。然而,OpenGL本身并不是一个API,它仅仅是一个由Khronos组织制定并维护的规范(Specification)。如果你有能力也可以自己开发一套遵循Khronos组织制定的规范的API,比如函数名相同参数也相同返回值也相同,功能相同但实现的方式可以不同。只要你开发的API符合Khronos组织的规范并且足够优秀就可以给游戏公司使用,那么他们就可以像调用OpenGL一样调用你的API不用修改原来的代码。
如果你的机子上装是NVIDIA的显卡Linux系统那么你的OpenGL函数中的代码就是调用NVIDIA的显卡驱动,如果你是AMD的显卡Linux系统那么同样的OpenGL函数中的代码会调用AMD的显卡驱动,Intel的显卡同理。也就是OpenGL API接口相同但是会调用各自不同的显卡驱动,实现相同的功能。
版权声明:本文为CSDN博主「yangjia_cheng」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/yangjia_cheng/article/details/103499244
1 | const GLubyte* name = glGetString(GL_VENDOR); //返回负责当前OpenGL实现厂商的名字 |
ubuntu 更改openGL使用的显卡
查看
1 | glxinfo | grep OpenGL |
更改
1 | sudo prime-select nvidia |
https://forums.developer.nvidia.com/t/how-to-install-opengl-libs-of-nvidia/175409
可以通过action editor 添加action, 拖拽即可添加到工具栏
自定义的 opengl 类
QT 自定义 QOpenGLWidget 类之后, 比如名叫 myopengl.cpp myopengl.h 中的myopengl 类, 需要在ui界面把 拖拽的 QOpenGLWidget 控件 提升 为 myopengl 类内以便操作
QT 提升为的作用
自己继承Qwidget写了一个类 MyWidget,里面有各种炫酷的功能,我们要想使用,则必须在代码中 new MyWidget()来使用,但是在界面设计时候拖拽一个widget控件,把它提升为MyWidget类,这样这个widget控件就能直接当作MyWidget类的可视化控件来用了。
其实提升,就是多继承的意思,使得这个类拥有了多个类的成员和方法,因为c++允许多继承,这个还是特别方便的。
提升,有个 全局包含 复选框
打勾✔后ui_xxx.h 包含的时候就是 <>
#include
不打勾就是 “”
#include “xxxxx.h”,这个就是相对工程中的当前文件夹的路径了,就可以用../../xx.h这样的访问方式
版权声明:本文为CSDN博主「我是标同学」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/kangkanglhb88008/article/details/121408388