打开Qt 5.6中的gl
Opengl in Qt 5.6
我曾经使用Qt 5.1.1,OpenGL曾经工作得很好。
现在我已经安装了Qt 5.6,OpenGL应用程序似乎不像5.1.1那样简单
GL函数(甚至包括#include <QOpenGLFunctions>
)返回"未定义引用"。也许因为它是一个非常新的版本,我找不到任何帮助。
主要问题是:如何在Qt 5.6版本中使用OpenGL?GL的任何功能都有效。
在Qt手册的一些示例中,我看到initializeOpenGLFunctions()
使它发挥了作用,但我的代码无法识别此语句(我尝试过#包含很多内容)。
代码是最基本的:
glwidget.h:
#ifndef GLWIDGET_H
#define GLWIDGET_H
#include <QGLWidget>
class GLWidget : public QGLWidget
{
Q_OBJECT
public:
explicit GLWidget(QWidget *parent = 0);
void initializeGL();
void paintGL();
void resizeGL(int w, int h);
};
#endif // GLWIDGET_H
主窗口.h:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
glwidget.cpp:
#include "glwidget.h"
#include <QWidget>
#include <QOpenGLFunctions>
GLWidget::GLWidget(QWidget *parent) :
QGLWidget(parent)
{
}
void GLWidget::initializeGL()
{
glClearColor(1,1,0,1);
}
void GLWidget::paintGL()
{
}
void GLWidget::resizeGL(int w, int h)
{
}
main.cpp:
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
mainwindow.cpp:
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
test.pro:
QT += core gui opengl
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = Test
TEMPLATE = app
SOURCES += main.cpp
mainwindow.cpp
glwidget.cpp
HEADERS += mainwindow.h
glwidget.h
FORMS += mainwindow.ui
我假设您的"未定义引用错误"指向您尝试使用的glColor()
函数。
为了能够使用QOpenGLFunctions
,如glColor()
,您必须使您的GLWidget
也继承自QOpenGLFunctions
;例如:
#include <QOpenGLFunctions>
class GLWidget: public QGLWidget, protected QOpenGLFunctions
{ // ...
};
有关更多详细信息,请参见此示例。
注意:强烈建议不要在新代码中使用QGLWidget
,而应使用QOpenGLWidget
。
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- .cpp和.h文件中的模板专用化声明
- 反向给定链表中的K节点
- 正在查找文档以获得PS4平台的C++中的设备信息
- enum是C++中的宏变量还是整数变量
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 将字符串存储在c++中的稳定内存中
- 文本文件中的单词链表
- 递归函数计算序列中的平方和(并输出过程)
- 如何从C++中的依赖类型中获得它所依赖的类型
- GCC 相当于 MSVC 中的 /GS、/GL、/Gy、/Oi、/MD
- 识别安卓中意外的 GL 上下文丢失
- 开放的GL和Glut在10.9中被弃用
- 打开Qt 5.6中的gl
- 如何将 Open GL 驱动程序中的分段错误追溯到我的源代码
- Visual Studio 中的 /GL 和 /LTCG 有什么区别?
- 不要同时 #include<GL/glcorearb.h>和<GL/gl.h>或<GL/glext.h中的任何一个>
- 如何从文件中的类调用,以使用着色器显示在另一个包含gl代码的文件中(其中两个文件都在jni文件夹中)
- 使用一个 GL ELEMENT_ARRAY_BUFFER引用 0 中的每个属性
- OpenGL函数在命名空间gl中的缺点是什么?