opengl png图片 qt_Qt学习:三维绘图之OpenGL和Qt的结合(转)

OpenGL是绘制三维图形的标准API。Qt应用程序可以使用QtOpenGL模块绘制三维图形,该模块依赖于系统的OpenGL库。Qt OpenGL模块提供QGLWidget类,可以通过对它子类化,并使用OpenGL命令开发出自己的窗口部件。对许多三维应用程序来说,这就足够了。

这节假设大家都已经学过OpenGL,这样我们就无后顾之忧了。

在Qt中绘制OpenGL通常需要做以下工作:1)、必须子类化QGLWidget;2)、实现几个虚函数:void initiallizeGL()

void resizeGL(), void paintGL(), 这些都是在QGLWidget中实现的,还有一些和用户交互的虚函数,诸如void mouseMoveEvent()之类的,想必大家都比较熟了,这些虚函数是在Widget中实现的。

下面我们介绍一个例子。先给出该程序的效果:

c3cf66a372ab69a0ff02d09817e4ff59.png

菜单栏里的第一项可以完成一个自定义大小的抓图,即由用户自己决定抓图的大小,抓图会显示在右侧的方框里,注意这里只能设置图形的大小小雨当前图形的尺寸, 如果大于当前图形尺寸,则钳位到当前图形尺寸。效果 看起来应该是这样:

bae992bc55e1859ce79142eac18ce5b7.png

菜单栏第二项也是一个抓图功能,它返回一个当前图形尺寸的图形,并填充到右侧。

第三项即清除右侧图形。

这个代码由以下部件构成:

一个QMainWindow,我们通过子类化这个类来完成自己想要的一些功能。

一个QWidget,我们把它作为中央窗口,在其上添加自己想要的一些子部件。

两个QScrollBar,用来盛载一个QGLWidget和一个QLabel。

一个QGLWidget,我们通过子类化它并把它加进一个QScrollBar来实现三维绘图,即上图所示的左边窗口。

一个QLabel,同样,我们把这个QLabel加进一个QScrollBar来接收抓图后的显示效果。

三个QSlider,我们通过这三个滑动条控制所绘制的四面体沿x,y,z轴转动,同样鼠标拖动这个四面体也可以改变滑动条的值。

以上是整个程序的框架。

以下是代码的实现部分。

MainWindow 类定义了我们整个程序的框架:

//mainwindow.h

#ifndef MAINWINDOW_H

#define MAINWINDOW_H

#include

class QAction;

class QLabel;

class QMenu;

class QSlider;

class QScrollArea;

class GLWidget;

class MainWindow : public QMainWindow

{

Q_OBJECT

public:

MainWindow(QWidget *parent = 0);

~MainWindow();

private slots:

void renderIntoPixmap();

void grabFrameBuffer();

void clearPixmap();

void about();

private:

void createMenus();

void createActions();

QSlider *createSlider(const char *changedSignal, const char *setterSlot);

void setPixmap(const QPixmap &pixmap);

QSize getSize();

QWidget *centralWidget;

QScrollArea *glWidgetArea;

QScrollArea *pixmapLabelArea;

GLWidget *glWidget;

QLabel *pixmapLabel;

QSlider *xSlider;

QSlider *ySlider;

QSlider *zSlider;

QMenu *fileMenu;

QMenu *helpMenu;

QAction *renderIntoPixmapAction;

QAction *grabFrameBufferAction;

QAction *clearPixmapAction;

QAction *exitAction;

QAction *aboutAction;

QAction *aboutQtAction;

};

#endif // MAINWINDOW_H

以下是程序的实现部分:

//mainwindow.cpp

#include

#include

#include

#include

#include

#include

#include

#include

#include "main

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值