QT + openGL

openGLWdiget 控件 重载 keyPressEvent 不起作用

需要在构造函数中设置聚焦策略

1
setFocusPolicy(Qt::TabFocus);

https://blog.csdn.net/WILLIAMMMS/article/details/92792933

QT openGL 主要函数

1:initializeGL()函数只在程序开始时运行一次,之后不会再运行
2:resizeGL()只在在窗口尺寸发生变化时,会自动运行,然后触发paint事件,从而调用paintGL()事件处理函数
3:paintGL()会在窗口位置移动时被调用,或是窗口在隐藏和显示之间变换时,被调用
4.updateGL()功能是触发paintGL()

https://blog.csdn.net/qq_41598072/article/details/103694711

查看显卡信息

世界上有很多显卡制造商如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
2
3
4
5
6
7
8
9
10
11
const GLubyte* name = glGetString(GL_VENDOR); //返回负责当前OpenGL实现厂商的名字
const GLubyte* biaoshifu = glGetString(GL_RENDERER); //返回一个渲染器标识符,通常是个硬件平台
const GLubyte* OpenGLVersion = glGetString(GL_VERSION); //返回当前OpenGL实现的版本号
const GLubyte* gluVersion = gluGetString(GLU_VERSION); //返回当前GLU工具库版本
const GLubyte* glslVersion = glGetString(GL_SHADING_LANGUAGE_VERSION);

printf("实现厂商: %s\n", name);
printf("渲染器: %s\n", biaoshifu);
printf("版本: %s\n", OpenGLVersion);
printf("GLU版本: %s\n", gluVersion);
printf("GLSL版本: %s\n", glslVersion);

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

https://blog.csdn.net/qq_41593900/article/details/124237380

可以通过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

QT 对于事件的理解?