我过去经常使用QT5.1.1,而OpenGL过去工作得很好。
现在,我已经安装了QT5.6,而且OpenGL应用程序似乎并不像5.1.1那样简单。
GL函数(甚至包括带有#include <QOpenGLFunctions>的函数)返回“未定义的引用”。也许是因为它是一个非常新的版本,我找不到任何东西来帮助我解决这个问题。
主要问题是:如何继续使用QT5.6版本的OpenGL?任何GL功能都能工作。
我在一些Qt手册示例中看到,initializeOpenGLFunctions()使其工作,但我的代码不承认这个语句(我尝试了#包含很多东西)。
代码是最基本的:
格洛维吉
#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_Hglwidget.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发布于 2016-04-06 23:18:33
我假设您的“未定义引用错误”指向您试图使用的glColor()函数。
为了能够使用QOpenGLFunctions (如glColor() ),您必须使您的GLWidget也从QOpenGLFunctions继承;例如:
#include <QOpenGLFunctions>
class GLWidget: public QGLWidget, protected QOpenGLFunctions
{ // ...
};有关更多详细信息,请参阅这个例子。
Note:是新代码赞成QOpenGLWidget。
https://stackoverflow.com/questions/36463561
复制相似问题