赞
踩
Qt VS Tools可以在Visual Studio中通过管理扩展进行安装,也可以直接下载扩展包文件进行安装。
打开扩展->管理扩展
,搜索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
在QT中使用OpenGL和直接使用OpenGL并没有本质区别,只不过是使用qt窗口替换了GLFW窗口设计,使用initializeOpenGLFunctions
代替GLAD管理OpenGL函数指针。
在QT中,需要新建一个控件类,继承QOpenGLWidget
和QOpenGLFunctions
,重写initializeGL/resizeGL/paintGL
方法,initializeGL用于初始化opengl;resizeGL中重新计算相机相关参数;paintGL进行绘制,即openGL中主循环的部分,但此方法只有在移动窗口或显示/隐藏窗口时会被触发,因此还需新建一个定时器定时调用update()方法,主动触发paintGL(),定时刷新。
代码如下:
// GlWidget.h #pragma once #ifndef __GL_WIDGET_H__ #define __GL_WIDGET_H__ #include <QOpenGLWidget> #include <QOpenGLFunctions> #include <QTimer> class GlWidget : public QOpenGLWidget, protected QOpenGLFunctions { Q_OBJECT public: GlWidget(QWidget* parent = 0); ~GlWidget(); protected: void initializeGL() override; void resizeGL(int w, int h) override; void paintGL() override; private: QTimer* timer; }; #endif // WIDGET_H
// GlWidget.cpp #include "GlWidget.h" GlWidget::GlWidget(QWidget* parent) : QOpenGLWidget(parent) { } GlWidget::~GlWidget() { } void GlWidget::initializeGL() { this->initializeOpenGLFunctions(); //为当前上下文初始化提供OpenGL函数解析 timer = new QTimer(); timer->setInterval(33); connect(timer, SIGNAL(timeout()), this, SLOT(update())); timer->start(); } void GlWidget::resizeGL(int w, int h) { glViewport(0.0f, 0.0f, w, h); //调整视口 } void GlWidget::paintGL() { 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); //清除颜色缓冲 }
// qt_test.h #pragma once #include <QtWidgets/QMainWindow> #include <Qlabel> #include <QPushButton> #include <Qopenglwidget> #include "ui_qt_test.h" #include "GlWidget.h" class qt_test : public QMainWindow { Q_OBJECT public: qt_test(QWidget *parent = Q_NULLPTR); void onButtonClick(); private: Ui::qt_testClass ui; QLabel* lab; QPushButton* button; GlWidget* opengl_widget; };
// qt_test.cpp #include "qt_test.h" qt_test::qt_test(QWidget *parent) : QMainWindow(parent) { ui.setupUi(this); this->opengl_widget = new GlWidget(this); this->opengl_widget->setGeometry(this->geometry()); this->lab = new QLabel("Hello,World!", this); this->lab->setGeometry(10, 20, 100, 20); this->button = new QPushButton("test", this); this->button->setGeometry(10, 40, 100, 20); QObject::connect(this->button, &QPushButton::clicked, this, &qt_test::onButtonClick); } void qt_test::onButtonClick() { static int i = 0; this->lab->setText(QString::number(i++)); }
// main.cpp
#include "qt_test.h"
#include <QtWidgets/QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
qt_test w;
w.show();
return a.exec();
}
代码通过OPENGL实现了一个简单的颜色变化的窗口,其他openGL相关的绘制和GLFW+OPENGL类似,不再介绍。
具体可以看QT+OpenGL实现Hello Triangle,绘制三角形
如果对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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。