Visual Studio 2022配置QT+OpenGL开发环境
参考: Visual Studio 2022配置QT+OpenGL开发环境_wk930523的博客-CSDN博客
一、环境
操作系统:Windows 11
IDE:Microsoft Visual Studio Community 2022 (64 位)
QT:5.12.12
二、安装Qt VS Tools
Qt VS Tools可以在Visual Studio中通过管理扩展进行安装,也可以直接下载扩展包文件进行安装。
在VS扩展中安装
打开扩展->管理扩展,搜索qt,下载Qt Visual Studio Tools,重启软件生效即可
下载安装
地址:https://download.qt.io/development_releases/vsaddin/
我安装的是qt-vsaddin-msvc2022-2.8.1.vsix
三、创建新项目
安装Qt VS Tools后可以在新建项目时看到Qt相关的工程,选择Qt Widgets Application
如果第一次创建时提示下面界面,需要设置Qt版本和路径
在VS中扩展->Qt VS Tools->Qt Versions,设置QT路径
创建成功。
问题:
双击.ui文件打开Qt Designer,会闪退并报错
解决方法如下:
https://blog.csdn.net/weixin_32155265/article/details/114905744
四、使用openGL
在QT中使用OpenGL和直接使用OpenGL并没有本质区别,只不过是使用qt窗口替换了GLFW窗口设计,使用initializeOpenGLFunctions代替GLAD管理OpenGL函数指针。
在QT中,需要新建一个控件类,继承QOpenGLWidget和QOpenGLFunctions,重写initializeGL/resizeGL/paintGL方法,initializeGL用于初始化opengl;resizeGL中重新计算相机相关参数;paintGL进行绘制,即openGL中主循环的部分,但此方法只有在移动窗口或显示/隐藏窗口时会被触发,因此还需新建一个定时器定时调用update()方法,主动触发paintGL(),定时刷新。

拖拽一个OpenGL控件

创建一个继承自QOpenGLWidgets的类

选择Widgets Class

设置父类 QOpenGLWidget

设置类名为:QtMyOpenGLWidgetsClass
重写这个类的paintGL即可实现绘制,ui部分自动衔接由QT框架已经处理好了。
手动添加父类, public QOpenGLFunctions
包含头文件:#include <QOpenGLFunctions>
提升.ui文件中OpenGL控件的类名为自定义类型:记事本打开手动修改为QtMyOpenGLWidgetsClass最好
在Qt Designer更改部件类名_荆楚闲人的博客-CSDN博客

记事本将原来的QOpenGLWidget作为类型的控件类名改为自己的,就可以直接编译运行了。
代码如下:
// QtMyOpenGLWidgetsClass.h
#pragma once
#include <QOpenGLWidget>
#include <QOpenGLFunctions>
#include "ui_QtMyOpenGLWidgetsClass.h"
#include <QTimer>
class QtMyOpenGLWidgetsClass : public QOpenGLWidget, public QOpenGLFunctions
{
Q_OBJECT
public:
QtMyOpenGLWidgetsClass(QWidget *parent = Q_NULLPTR);
~QtMyOpenGLWidgetsClass();
private:
void initializeGL() override;
void resizeGL(int w, int h) override;
void paintGL() override;
private:
Ui::QtMyOpenGLWidgetsClass ui;
QTimer timer;
};
// QtMyOpenGLWidgetsClass.cpp
#include "QtMyOpenGLWidgetsClass.h"
QtMyOpenGLWidgetsClass::QtMyOpenGLWidgetsClass(QWidget *parent)
: QOpenGLWidget(parent)
{
ui.setupUi(this);
}
QtMyOpenGLWidgetsClass::~QtMyOpenGLWidgetsClass()
{
}
void QtMyOpenGLWidgetsClass::initializeGL()
{
this->initializeOpenGLFunctions(); //为当前上下文初始化提供OpenGL函数解析
glClearColor(0, 0, 0, 1);
timer.setInterval(33);
connect(&timer, SIGNAL(timeout()), this, SLOT(update()));
timer.start();
}
void QtMyOpenGLWidgetsClass::resizeGL(int w, int h)
{
glViewport(0.0f, 0.0f, w, h); //调整视口
}
void QtMyOpenGLWidgetsClass::paintGL()
{
makeCurrent();
static float r = 0.0, g = 0.0, b = 0.0;
r += 0.01;
g += 0.02;
b += 0.03;
if (r > 1)r = 0;
if (g > 1)g = 0;
if (b > 1)b = 0;
glClearColor(r, g, b, 1.0f); //清屏
glClear(GL_COLOR_BUFFER_BIT); //清除颜色缓冲
}
// qtopenglrender.h
#pragma once
#include <QtWidgets/QMainWindow>
#include "ui_qtopenglrender.h"
#include "QtMyOpenGLWidgetsClass.h"
class QtOpenGLRender : public QMainWindow
{
Q_OBJECT
public:
QtOpenGLRender(QWidget *parent = Q_NULLPTR);
private:
Ui::QtOpenGLRenderClass ui;
QtMyOpenGLWidgetsClass my;
};
// qtopenglrender.cpp
#include "qtopenglrender.h"
#include "stdafx.h"
QtOpenGLRender::QtOpenGLRender(QWidget *parent)
: QMainWindow(parent),my(parent)
{
ui.setupUi(this);
}
// main.cpp
#include "qtopenglrender.h"
#include "stdafx.h"
#include <QtWidgets/QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QtOpenGLRender w;
w.show();
return a.exec();
}
代码通过OPENGL实现了一个简单的颜色变化的窗口

如果对OpenGL不熟悉,推荐在learningopengl进行系统学习:https://learnopengl-cn.github.io/
相关链接和参考
https://blog.csdn.net/qq_36290227/article/details/104953363
https://blog.csdn.net/WindSunLike/article/details/103945051
https://download.qt.io/development_releases/vsaddin/
https://blog.csdn.net/weixin_32155265/article/details/114905744
https://blog.csdn.net/qq_37996632/article/details/102550380
https://blog.csdn.net/weixin_44518102/article/details/119306516
————————————————
版权声明:本文为CSDN博主「wk930523」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u013595260/article/details/123812264
更多推荐



所有评论(0)