Qt 已有头文件与源文件,关联新建的UI文件

示例中:头文件名称、源文件名称、UI文件名称、类名称均一致

1、新建UI文件,名称需要与头文件名称一致,格式为.ui

在这里插入图片描述
在这里插入图片描述

2、头文件处理

1、引入QWidget类

在这里插入图片描述

2、加入namespace Ui {class 头文件类名称}

在这里插入图片描述

3、在头文件类中加入私有权限的Ui::头文件类名 *ui;

在这里插入图片描述

3、操作处理 在头文件所在的文件夹使用终端执行uic 头文件类名.ui ui_头文件类名.h

在这里插入图片描述

最终生成一个ui_头文件类名.h的的文件

4、源文件处理

1、引用头文件与生成的ui头文件

在这里插入图片描述

2、构造函数及初始化

在这里插入图片描述

3、析构函数对UI类析构

在这里插入图片描述

5、修改ui_头文件类的数据

1、类名称为Ui_头文件类名;修改namespace Ui{class 头文件类名:public Ui_头文件类名{} }

在这里插入图片描述

6、清除数据重新编译

以下是基于 Qt 的 OpenGL 显示照片的代码示例,包括 .pro 文件头文件源文件: 1. .pro 文件: ``` QT += core gui opengl greaterThan(QT_MAJOR_VERSION, 4): QT += widgets TARGET = OpenGLPhotoViewer TEMPLATE = app # OpenGL 配置 CONFIG += opengl LIBS += -lGL SOURCES += \ main.cpp \ glwidget.cpp HEADERS += \ glwidget.h FORMS += \ mainwindow.ui ``` 2. glwidget.h 头文件: ```cpp #ifndef GLWIDGET_H #define GLWIDGET_H #include <QOpenGLWidget> #include <QOpenGLFunctions> #include <QOpenGLShaderProgram> #include <QOpenGLTexture> #include <QImage> class GLWidget : public QOpenGLWidget, protected QOpenGLFunctions { public: GLWidget(QWidget *parent = nullptr); ~GLWidget(); void setTextureImage(const QImage& image); protected: void initializeGL(); void resizeGL(int w, int h); void paintGL(); private: QOpenGLShaderProgram m_program; QOpenGLTexture* m_texture = nullptr; }; #endif // GLWIDGET_H ``` 3. glwidget.cpp 源文件: ```cpp #include "glwidget.h" #include <QDebug> GLWidget::GLWidget(QWidget *parent) : QOpenGLWidget(parent) { } GLWidget::~GLWidget() { makeCurrent(); delete m_texture; doneCurrent(); } void GLWidget::setTextureImage(const QImage &image) { makeCurrent(); // 创建纹理 if (!m_texture) { m_texture = new QOpenGLTexture(QOpenGLTexture::Target2D); m_texture->setMinificationFilter(QOpenGLTexture::Linear); m_texture->setMagnificationFilter(QOpenGLTexture::Linear); m_texture->setWrapMode(QOpenGLTexture::ClampToEdge); } // 更新纹理数据 m_texture->setData(image); doneCurrent(); } void GLWidget::initializeGL() { initializeOpenGLFunctions(); // 加载顶点和片段着色器 m_program.addShaderFromSourceFile(QOpenGLShader::Vertex, ":/shaders/vertex.glsl"); m_program.addShaderFromSourceFile(QOpenGLShader::Fragment, ":/shaders/fragment.glsl"); m_program.link(); } void GLWidget::resizeGL(int w, int h) { glViewport(0, 0, w, h); } void GLWidget::paintGL() { glClear(GL_COLOR_BUFFER_BIT); // 绑定纹理 if (m_texture) { m_texture->bind(); } // 绘制矩形 m_program.bind(); m_program.enableAttributeArray("vertexPosition"); m_program.setAttributeArray("vertexPosition", GL_FLOAT, nullptr, 2); glDrawArrays(GL_TRIANGLE_FAN, 0, 4); m_program.disableAttributeArray("vertexPosition"); m_program.release(); } ``` 其中,vertex.glsl 和 fragment.glsl 是顶点和片段着色器文件,需要将它们放置在工程目录的 shaders 文件夹下: vertex.glsl: ```glsl attribute vec4 vertexPosition; void main() { gl_Position = vertexPosition; } ``` fragment.glsl: ```glsl uniform sampler2D textureSampler; void main() { gl_FragColor = texture2D(textureSampler, gl_TexCoord[0].st); } ``` 4. main.cpp 源文件: ```cpp #include "mainwindow.h" #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; w.show(); return a.exec(); } ``` 5. MainWindow.ui 文件: 在 Qt Designer 中创建一个 QWidget,将其转换成 QOpenGLWidget,然后将 GLWidget 实例添加到该 QOpenGLWidget 上。 以上就是基于 Qt 的 OpenGL 显示照片的代码示例,可以根据需要进行修改和完善。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

忽茹一夜春风来

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值